包装 MFC 应用程序(目标移动设备)以创建 dll 以在 c#.NET 中使用以进行互操作

Posted

技术标签:

【中文标题】包装 MFC 应用程序(目标移动设备)以创建 dll 以在 c#.NET 中使用以进行互操作【英文标题】:wrapping MFC application(target mobile device) to create dll for use in c#.NET for interop 【发布时间】:2010-01-21 07:14:44 【问题描述】:

我有一个要在移动设备上运行的 MFC 应用程序。现在这个应用程序代码需要从 C# 中重用。 我正在尝试创建包装器、dll 并从 c# 导入此 dll。

面临的问题是,我的项目不是类库。所以我在同一个解决方案中创建了另一个 MFC 类库 - (MFC-Shared dll),并尝试在这个库中创建包装函数。但即使添加了引用,我也无法从这个库中创建任何对象或访问我的应用程序的任何功能。

有什么方法可以从这个库中访问我的应用程序代码。

请帮忙

【问题讨论】:

【参考方案1】:

我建议将其中一些代码拆分为 C++ DLL(不是类库),然后使用 C# 中的 DllImport 属性来访问这些函数(请参阅http://msdn.microsoft.com/en-us/library/26thfadc.aspx)。然后,您仍然可以通过添加项目依赖项在 MFC 应用程序中使用该 DLL(首先将两个项目添加到同一解决方案中)。这样会自动创建一个 lib 包装器并将其链接到 MFC 应用程序。

另一种解决方案(但可能需要更多工作)是通过打开命名管道或 TCP 套接字在 MFC 应用程序和 C# 客户端之间进行进程间通信。作为协议,您可以创建自己的协议(就像我们在公司所做的那样)或使用 XML-RPC、SOAP 等协议。例如,您可以尝试让 gSOAP 在 MFC 服务器中工作,然后定义一个 WSDL 文件并让 Visual Studio 自动生成 C# 客户端代码。

另一种解决方案是将 MFC 应用程序的一部分转换为 COM DLL。然后 MFC 和 C# 客户端都可以使用它。但我不认为这个解决方案比“普通”的 DLL 解决方案增加了任何东西。

抱歉,我不知道一个简单的解决方案(或至少一个不需要大量工作的解决方案)。

【讨论】:

感谢您的建议。我一定会试一试的。但是这种方法的问题是我可能必须重组我当前的应用程序,将其拆分为 dll 并从 MFC 使用,也可以从 c# 调用。有没有可能对我当前的应用程序进行最小的更改并创建一个 dll 来充当从 c# 调用的包装器(它调用我的应用程序代码),可以解决我的问题??

以上是关于包装 MFC 应用程序(目标移动设备)以创建 dll 以在 c#.NET 中使用以进行互操作的主要内容,如果未能解决你的问题,请参考以下文章

css 将div中的所有表包装在一起以允许在移动设备上进行水平滚动 - CSS AND JS

css 将div中的所有表包装在一起以允许在移动设备上进行水平滚动 - CSS AND JS

如何使用 MFC 以编程方式更改 ActiveX 控件的属性?

MFC GDI绘图

MFC 对话框的事件处理

C++/CLI 包装器尝试使用 MFC CObject 继承