2013-04-20 130 views
1

我在C++中只有一个显示窗口的.exe程序。如何将该.exe程序转换为.dll文件,然后如何使用C#访问该.dll文件,以便显示该窗口。这里是我的C++代码:将.exe C++文件(创建窗口)转换为.dll C++文件并在C#中使用该.dll文件。

#include <windows.h> 

const char g_szClassName[] = "myWindowClass"; 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch(msg) 
    { 
     case WM_CLOSE: 
      DestroyWindow(hwnd); 
     break; 
     case WM_DESTROY: 
      PostQuitMessage(0); 
     break; 
     default: 
      return DefWindowProc(hwnd, msg, wParam, lParam); 
    } 
    return 0; 
} 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow) 
{ 
    WNDCLASSEX wc; 
    HWND hwnd; 
    MSG Msg; 

    wc.cbSize  = sizeof(WNDCLASSEX); 
    wc.style   = 0; 
    wc.lpfnWndProc = WndProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance  = hInstance; 
    wc.hIcon   = LoadIcon(NULL, IDI_APPLICATION); 
    wc.hCursor  = LoadCursor(NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = g_szClassName; 
    wc.hIconSm  = LoadIcon(NULL, IDI_APPLICATION); 

    if(!RegisterClassEx(&wc)) 
    { 
     MessageBox(NULL, "Window Registration Failed!", "Error!", 
      MB_ICONEXCLAMATION | MB_OK); 
     return 0; 
    } 

    hwnd = CreateWindowEx(
     WS_EX_CLIENTEDGE, 
     g_szClassName, 
     "The title of my window", 
     WS_OVERLAPPEDWINDOW, 
     CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, 
     NULL, NULL, hInstance, NULL); 

    if(hwnd == NULL) 
    { 
     MessageBox(NULL, "Window Creation Failed!", "Error!", 
      MB_ICONEXCLAMATION | MB_OK); 
     return 0; 
    } 

    ShowWindow(hwnd, nCmdShow); 
    UpdateWindow(hwnd); 

    while(GetMessage(&Msg, NULL, 0, 0) > 0) 
    { 
     TranslateMessage(&Msg); 
     DispatchMessage(&Msg); 
    } 
    return Msg.wParam; 
} 
+0

如果您发现将.exe转换为.dll或转换为原始代码,请告诉我们,我们将会变得富有。换句话说,编辑你的标题。 – 0x90 2013-04-20 15:10:43

+1

只用C#创建窗口会不会更容易? – WhozCraig 2013-04-20 15:13:04

+0

我正在用C++编写一个Direct3D应用程序,我想将它用于我的C#程序。 – 2013-04-20 15:33:00

回答

2

两个步骤:

  1. 如果你有一个C++程序,你可以通过下面这个 post打造为dll,假设你使用Visual Studio。
  2. 为了使用c++dll一个c#程序中,你需要阅读:

+0

谢谢,我会试一试:)。 – 2013-04-20 15:33:25

+0

但是如何处理hInstance变量?我需要这个来初始化我的窗口。 – 2013-04-20 15:36:15

+0

请阅读本文http://social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/066a1a5d-b463-4988-9997-ce5e519bf16d/ – 0x90 2013-04-20 15:37:23