I’m using System.Runtime.InteropServices to call several functions written in C++ from my C# app. I’m just having problems with a particular function that returns an array.
I’ve seen that my function shouldn’t return anything, and a pointer to the “returning variable” should be en entry. But I’m not managing to do it properly.
For instance if I have a function in c++
void func(double *y, double *x){...}
that manipulates an array x and returns an array y.
I’m doing:
-in my .h:
extern "C" __declspec(dllexport) void func(double *y,double *x);
-in my .cpp:
__declspec(dllexport) void func(double *y,double *x){...}
-in my c# code:
static class AnyClass
{
[DllImport(dllPath)]
public extern static void func(out double[] y, double[] x);
int otherfunc
{
double[] x = new double[5];
double[] y = new double[5];
...
func(out y, x);
}
}
but it gives me a System.EntryPointNotFoundException.
Any clue?
EntryPointNotFoundException means that nothing called ‘function’ was found in your DLL.
In your .h file you call it ‘func’. But in your .cpp file you call it ‘function’. And since your .h file is the only place which is declaring
extern "C", what is effectively happening is that the function is being exported by your DLL c++-style-name-mangled, instead of plain-c-style. So, when C# looks for plain-c-style ‘function’, it cannot find it.