从我的 C# 代码调用 C 函数时遇到问题。我想为 VLC 播放器添加一些功能(我们通过 vlcdotnet 在我们的软件中使用它)并使用 mingw 在我的 ubuntu 12.10 for windows 上交叉编译它。我写了一个函数,我们称之为 Foo:
__declspec(dllexport) void Foo(vlc_object_t* bar);
现在我想从 C# 调用它:
[LibVlcFunction("Foo")]
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void Foo(IntPtr pointer);
........
public LibVlcFunction<Foo> Foo { get; private set; }
......
Foo = new LibVlcFunction<Foo>(myLibVlcCoreDllHandle, VlcVersion);
它失败了。在 LibVlcFunction 的构造函数中,我们结合了 GetProcAddress 和 GetDelegateForFunctionPointer。GetProcAddress 因“函数 'Foo' 的地址不存在......”而失败,但 dumpbin 和 dep。沃克说功能存在,她的名字没有被破坏。我试图编写一个加载 libvlc.dll 并获取指向我的函数的指针的 C++ 应用程序,它可以工作。但在 C# 中它失败了。我该怎么办?有什么建议么?