2013-04-20 63 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