我的应用程序分为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);
}
从Unmanaged到Managed,我使用函数指针给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);
}
答案 0 :(得分:1)
最好是在两者之间创建一个轻量级C ++ / CLI程序集。这就是/为何为这种语言创建的原因。
此C ++ / CLI层将作为程序集引用无缝集成到您的C#项目中,可以像任何.net资源一样访问,并且C ++ / CLI可以无缝地调用任何本机C ++代码。
我已经停止将C ++直接调用到C#代码中,因为我已经尝试过这种技术。
如果您从未听说过C ++ / CLI,here's a concise tutorial in pdf format。