上篇文章讲解了在
C#
代码中调用纯
C++
模块的基本流程。在本文章中我们再来实现一下
C++
代码调用
C#
代码的过程。我构造一个简单并且直观的例子:通过
C++ UI
触发
C# UI
。
首先建立一个
C#
工程Class Library工程----
CSharpUI
为该工程添加一个Form界面,并添加一个C#函数--InvokeUi()来构造并显示这个界面
namespace
CSharpUI
{
public class Program
{
public static void InvokeUi()
{
// class Form1-----C# UI
Form1 fm = new Form1();
fm.ShowDialog();
}
}
}
{
public class Program
{
public static void InvokeUi()
{
// class Form1-----C# UI
Form1 fm = new Form1();
fm.ShowDialog();
}
}
}
建立一个托管的
DYNAMIC LINK LIBRARY
工程
----MgdPro(具体步骤参考上篇文章)。
在
MgdPro工程
中用
代码包装了对上述
C#
函数的调用,并将包装后的类从
DLL
导出。前提条件是reference CSharpUI.dll。
//
.h file
#define DLLIMPEXP __declspec(dllexport)
class DLLIMPEXP MgdClass
{
public :
static void InvokeCsharpDlg();
};
// .cpp file
using namespace CSharpUI;
void MgdClass::InvokeCsharpDlg()
{
Program::InvokeUi();
}
#define DLLIMPEXP __declspec(dllexport)
class DLLIMPEXP MgdClass
{
public :
static void InvokeCsharpDlg();
};
// .cpp file
using namespace CSharpUI;
void MgdClass::InvokeCsharpDlg()
{
Program::InvokeUi();
}
最后,新建一个
Dialog Based
的
C++
工程
----
PureC++Pro
(
exe
工程),在工程中静态链接
MgdPro.dll
。在
Invoke
按钮的触发函数里调用代码触发
C#
界面。
void
CPureCProDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
// call managed c++ to invoke c# UI
MgdClass::InvokeCsharpDlg();
}
{
// TODO: Add your control notification handler code here
// call managed c++ to invoke c# UI
MgdClass::InvokeCsharpDlg();
}
运行界面如下所示: