Say you have following C++ code:
extern "C" {
void testA(int a, float b) {
}
static void testB(int a, float b){
}
}
I want to access this in my C# project using DllImport
:
class PlatformInvokeTest
{
[DllImport("test.so")]
public static extern void testA(int a, float b);
[DllImport("test.so")]
internal static extern void testB(int a, float b);
public static void Main()
{
testA(0, 1.0f);
testB(0, 1.0f);
}
}
This works perfectly fine for testA
, but testB
fails throwing an EntryPointNotFoundException.
Can I access testB
from my C# code? How?
static
does not mean the same in C++ as it does in C#. At namespace scope, static
gives a name internal linkage, meaning that it is only accessible within the translation unit that contains the definition. Without static, it has external linkage, and is accessible in any translation unit.
You will need to remove the static
keyword when you want to use DllImport
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With