把WinMain封裝到dll裡

2021-06-02 20:29:48 字數 1423 閱讀 9396

把winmain封裝到dll裡

例子如下:

1.dll專案檔案testdll.cpp,**:

#include "stdafx.h"

int winapi winmain(hinstance hinstance,hinstance hprevinstance, lpstr lpcmdline,int ncmdshow) 

2.在dll專案中新增def模組定義檔案testdll.def,**:

exports

winmain

編譯生成testdll.lib和testdll.dll兩個庫檔案

3.主專案test.cpp,**:

#include "stdafx.h"

#pragma comment(lib, "../debug/testdll.lib")  引入之前生成的靜態庫

編譯生成test.exe

這樣執行test.exe就會彈出dll中的提示框了。

------------------------------

原理:test.cpp沒入口點winmain函式,只是連線了testdll庫,當test執行時,載入testdll的匯出函式winmain,test發現自己的**裡沒有入口點函式winmain,而在testdll裡找到了winmain,就呼叫了testdlldll的winmain。

----------------------------------

把winmain封裝到dll裡需要注意的幾個地方:

1.經過實驗發現,dll中入口點函式一定要為winmain方式,而不能為wwinmain,因為主程式test專案發現自己沒入口點函式後就只尋找

winmain入口點,而不會根據它自己是否定義了unicode來尋找winmain還是wwinmain入口點。當然,如果入口點函式放在主程式test專案原始檔裡,它則會根據是否定義了unicode來選擇winmain和wwinmain。但現在的情況就是,如果入口點函式不放在主程式test專案原始檔裡(比如放在testdll中),則主程式只找winmain入口點,而不找wwinmain。為什麼會這樣,具體情況未知,微軟留的**。

2.testdll中匯出winmain入口點函式只能用def模組定義檔案testdll.def方式匯出,而不能用extern "c" __declspec(dllexport) int

winapi……方式匯出。這兩種匯出是有區別的,def方式可以匯出任何函式,而extern "c" __declspec(dllexport)不能匯出winmain和

wwinmain函式(連線時會提示這兩個函式重定義了,也許還有些其他內定的函式也不能匯出),為什麼會這樣,具體情況未知,微軟留的黑

手。--------------------

mfc封裝原理:

這樣你主程式只要引用mfc庫,不寫winmain入口點函式,就可以正常執行,因為winmain函式已經在mfc的dll裡了。

MFC SDI封裝到DLL中的實現

開始搞mfc了,微軟把sdk封裝到了一堆類中,初次接觸真是相當頭大了。這乙個把sdi的程式需要對外提供乙個dll就把我折磨了好幾天,最後網上一頓查資料,寫程式測試,總算是有了乙個比較完善的解決方案了。剩下的問題就簡單了,把原來的程式,拷進去,在initinstance中進行重要的初始化操作,把 m ...

模板方法模式 把大象裝到冰箱裡共分幾步

實現public abstract class person protected abstract void closethefridgedoor protected abstract void pubelephantin protected abstract void openthefridged...

struts2中怎麼把表單資料封裝到實體類裡

如下是我測試過的 不懂可以扣我,詳解 這是action package com.user.action import com.opensymphony.xwork2.modeldriven jsp表單提交到action,action從實體類取jsp傳過來的資料。需要實現modeldriven介面同時...