Using a C Library in a managed DLL

K

Kidan

I have a .LIB file, built an compiled in C that I need to use in
my .NET application.

If I build a C++.Net Console application and activate the exposed
functions directly the library works perfectly.

If I try to compile the .LIB file into a managed DLL for use in either
my VB.Net GUI or my managed C++.Net Console application I get a Null
Reference Exception when the LIB makes a MALLOC call.

Is there some command or option that I need to set to allow my managed
DLL to be able to run MALLOC?

Thanks!
 
B

Ben Voigt

Kidan said:
I have a .LIB file, built an compiled in C that I need to use in
my .NET application.

If I build a C++.Net Console application and activate the exposed
functions directly the library works perfectly.

If I try to compile the .LIB file into a managed DLL for use in either
my VB.Net GUI or my managed C++.Net Console application I get a Null
Reference Exception when the LIB makes a MALLOC call.

What you can't do is call malloc in the DLL and free in the C++ console
application. Otherwise what you describe should work. Double-check the
argument to malloc and make sure it's reasonable, perhaps you are trying to
allocate sizeof(int) * -1 or something.
Is there some command or option that I need to set to allow my managed
DLL to be able to run MALLOC?

No, not really. Although operator new is preferred over malloc for C++
programs.
 
K

Kidan

What you can't do is call malloc in the DLL and free in the C++ console
application. Otherwise what you describe should work. Double-check the
argument to malloc and make sure it's reasonable, perhaps you are trying to
allocate sizeof(int) * -1 or something.
The malloc call is within the precompiled .LIB file so I don't have
access to it's calls/arguments.

No, not really. Although operator new is preferred over malloc for C++
programs.
Yeah, I prefer new, but unfortunately the precompiled library is in C.
 
B

Ben Voigt

Kidan said:
The malloc call is within the precompiled .LIB file so I don't have
access to it's calls/arguments.

Then how do you know that malloc is failing?

You could also provide your own malloc/free implementations as a thin
wrapper around HeapAlloc, with some extra logging.
 
K

Kidan

Then how do you know that malloc is failing?

You could also provide your own malloc/free implementations as a thin
wrapper around HeapAlloc, with some extra logging.

Because when I get the null reference exception, the C++ debugger
takes me to a malloc call (the VB.Net debugger just took me to
the .LIB call).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top