VC6的MFC如何调用C#的tlb文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC6的MFC如何调用C#的tlb文件相关的知识,希望对你有一定的参考价值。

参考技术A 在函数返回前进行的CoUninitialize,然后return TRUE之后,iClass1Ptr(智能指针)才开始释放,此时相当于在非套间环境内释放COM对象了,可能是这个原因导致的吧。

解决办法很简单,把CoUninitialize放到对话框的析构函数里就行了,或者把COM这两句代码用大括号合起来:

CoInitialize(NULL);

Csharp::iClass1Ptr p_Add(__uuidof(Class1));
p_Add->A();

CoUninitialize();

在 MFC 应用程序中托管 Windows 窗体 (C#) (VC++,VS6.0)

【中文标题】在 MFC 应用程序中托管 Windows 窗体 (C#) (VC++,VS6.0)【英文标题】:Host Windows Forms (C#) Inside MFC Application (VC++,VS6.0) 【发布时间】:2013-02-28 22:55:15 【问题描述】:

今天下午看了一大堆,没有得到任何切实的结果。是否可以在仍在使用 VC6 开发的 MFC 应用程序中托管 Windows 窗体对话框。

出现的问题是我们有一个大型应用程序从未使用新的 Visual Studio 升级,因为 VC6 始终可以正常工作。现在我们需要在其中添加一些 C# 功能。我无法执行 /clr 选项,因为我们的项目完全由非托管 C++ 组成。我在我们所有的库/头文件中搜索了“CWinFormsControl”,但没有找到任何东西。我不确定下一步该尝试什么。

另外,请原谅我在做研究以及对这种编程深度不熟悉时的任何无知。

我查看了以下文章:

http://msdn.microsoft.com/en-us/library/676cbawx(v=vs.100).aspx http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/97fddc35-e94d-4587-8be0-0b573185eb63/ http://msdn.microsoft.com/en-us/library/ahdd1h97(v=vs.80).aspx http://www.functionx.com/visualc/Lesson04.htm http://social.msdn.microsoft.com/Forums/sk/vcgeneral/thread/c38db22e-cf61-4b47-bcc8-e6202c40d1b5

【问题讨论】:

【参考方案1】:

CWinFormsControl 需要 MFC 8.0。

您可以make your managed assembly a COM server(例如 ActiveX)并像任何其他 COM 服务器一样在 MFC 应用程序中使用它。

【讨论】:

按照我的指示,我得到了一个由我的 C# 对话框构建的 DLL。我现在如何在 C++ 中调用/初始化它?原谅我的无知。 CoCreateInstance,通过 early (#import +tlbexp) 或后期 bing (IDispatch) 调用表单的 ShowDialog 方法。【参考方案2】:

我没有 VC6 来尝试这个,但我认为这应该是可能的;至少对于一个简单的模式 ShowDialog() 场景。

您将使用 C++/CLI 创建一个新的程序集/DLL,并使用 /clr 标志进行编译。这将使用通常的__declspec(dllexport) 向您现有的 MFC 代码公开一个非托管 API。该实现将调用您的 C# 代码,该代码将在另一个程序集中存在。

【讨论】:

最好的方法是什么?我对此很陌生。任何指向正确方向的指针都会有所帮助。

以上是关于VC6的MFC如何调用C#的tlb文件的主要内容,如果未能解决你的问题,请参考以下文章

VC6.0的程序结束后进程不自动结束,如何解决?

在VC6.0做的MFC程序,如何在BS中用浏览器打开

MFC如何调用DLL(VC++)

vc6.0里MFC进度条如何使用

如何在VC6。0运行C语言程序

如何更改弹出菜单的字体大小(MFC、VC6)