把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介面同時...