调用 C# 应用程序形成非托管 C 应用程序

Calling C# application form unmanaged C application

我有一个旧的 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?

将 C# 类(在您的新 exe 中)公开为 COM 对象,然后您将能够从 C++/MFC 调用它们。更多细节在这里 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interop/example-com-class.