您有两种选择,一种称为 ijw “它可以工作”,您可以在其中编写托管 c++ 并调用非托管 c++。另一个选项需要使用 pinvoke。
如果你使用 pinvoke,你会得到类似的东西
C#
somefunction("str1", "str2", "str3", "str4");
[DllImport(@"myproj.dll", EntryPoint = "somefunction")]
public static extern IntPtr SomeFunction([MarshalAs(UnmanagedType.LPWStr)]string jarg1, [MarshalAs(UnmanagedType.LPWStr)]string jarg2, [MarshalAs(UnmanagedType.LPWStr)]string jarg3, [MarshalAs(UnmanagedType.LPWStr)]string jarg4);
c++
extern "C" __declspec(dllexport) void* __stdcall somefunction(wchar_t * jarg1, wchar_t * jarg2, wchar_t * jarg3, wchar_t * jarg4)
{
//do some stuff with strings
}
如果你使用 SWIG,swig 会尝试自动生成上面的代码,但它是一个苛刻的大师。
我曾经使用过托管 c++,但我不记得我是怎么想的了。