在我的下一个项目中,我想为已经存在的C++代码实现GUI界面。我的计划是将C++部分封装在DLL中,并使用C#实现GUI。我的问题是我不知道如何从非托管的DLL调用回托管的C#代码。我已经在C#方面做了一些开发,但是托管和非托管代码之间的接口对我来说是新的。有人可以给我一些提示或阅读建议或一个简单的例子作为起点吗?不幸的是,我没有找到任何有用的信息。
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
class UnManagedInterop {
private delegate int Callback(string text);
private Callback mInstance; // Ensure it doesn't get garbage collected
public UnManagedInterop() {
mInstance = new Callback(Handler);
SetCallback(mInstance);
}
public void Test() {
TestCallback();
}
private int Handler(string text) {
// Do something...
Console.WriteLine(text);
return 42;
}
[DllImport("cpptemp1.dll")]
private static extern void SetCallback(Callback fn);
[DllImport("cpptemp1.dll")]
private static extern void TestCallback();
}
以下是用于创建非托管DLL的相应C++代码:
#include "stdafx.h"
typedef int (__stdcall * Callback)(const char* text);
Callback Handler = 0;
extern "C" __declspec(dllexport)
void __stdcall SetCallback(Callback handler) {
Handler = handler;
}
extern "C" __declspec(dllexport)
void __stdcall TestCallback() {
int retval = Handler("hello world");
}