调用C#应用程序表单非托管C应用程序

时间:2018-01-09 09:55:46

标签: c# c++ com-interop

我有一个旧的C ++应用程序,由其他一些MFC和WPF应用程序调用。 此应用程序使用MIDL_INTERFACE来公开其功能,如:

// in header file:
MIDL_INTERFACE("00020400-0000-0000-C000-000000000046")
IDispatch : public IUnknown
{
public:
    virtual HRESULT Connect(long hwnd);
    //...
}

MIDL_INTERFACE("D949F6BF-B8D5-4A3F-A7A7-83E9CBCE88DE")
App : public IDispatch 
{
public:
    HRESULT __stdcall Connect(long hwnd);
    //...
}

该应用程序的实现如下:

// in .cpp file:
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance,
                 HINSTANCE hPrevInstance,
                 LPTSTR    lpCmdLine,
                 int       nCmdShow)  { /*...*/ }

STDMETHODIMP App::Connect(long hwnd) { /*...*/ }

如果不弄乱没人理解的旧C ++代码,我想用C#重写这个应用程序。 目前,我可以轻松地在其他WPF应用程序中调用我重写的C#应用​​程序,只需添加对我的.exe文件的引用。

我知道我可以通过在VisualStudio中注册COM互操作来构建一个单独的dll(如this article)。但是如何让其他MFC应用程序引用我的新.exe,而无需额外的COM dll?

1 个答案:

答案 0 :(得分:2)

将C#类(在新的exe中)公开为COM对象,然后您就可以从C ++ / MFC中调用它们了。更多详情请见examples like this