我的应用程序分为 C#(托管代码)和 c++(非托管代码)两部分。这两个部分经常互相调用,并且通常在它们之间传递字符串。我想知道做到这一点的最佳且无错误的方法。
我把问题分成两部分
从托管调用非托管代码时,我使用字符串生成器从托管传递到非托管:
[DllImport("SomeXYZ.dll")] // enter code here private void XYZ(string text) { StringBuilder builder = new StringBuilder(); builder.Append(“Var1”); FromManagedtoUnmanaged(builder); }
C++ 代码:
extern "C" { int _declspec(dllexport) FromManagedtoUnmanaged(char* var1); }
从非托管到托管,我使用函数指针将 c# 函数的函数引用提供给 c++ 函数:
C# 代码
[DllImport("SomeXYZ.dll")] public static extern void SetCallback(Callback fn); public delegate void Callback(string text); public Callback mInstance; private void ABC(string text) { mInstance = new Callback(SomeFunctionName); SetCallback(mInstance); }
C++ 代码,在头文件中:
extern "C" { void __declspec(dllexport) __stdcall SetCallback(Callback handler); void __declspec(dllexport) __stdcall SendReceiveMessage(char* arr1); }
在 .cpp 文件中:
void __stdcall SetCallback(Callback handler1) { Handler = handler1; } void __stdcall SendReceiveMessage(char* arr1) { Handler(arr1); } void SendMsg(int SomeVar) { char *str; str = new char[1024]; sprintf(str, “<body>%d</body>”, SomeVar); SendReceiveMessage(str); }