用Delphi呼叫C++ DLL的問題(已爬文) |
答題得分者是:rick060
|
shinjuwu
一般會員 發表:1 回覆:0 積分:0 註冊:2010-10-12 發送簡訊給我 |
各位好!
小弟最近在Delphi呼叫C 的DLL遇到了一點問題, 目前我手上有C 的範例(讀卡機相關的程式),也可以跑, 我已爬了一些版上的文,以及網路上的文, 參考:http://www.drbob42.com/delphi/headconv.htm 成功的將C 範例,改成用Delphi呼叫的版本, 但是在一開始的Port連線就遇到問題, 不知為啥,一直無法連線成功(用C 是可以連的,所以排除是硬體問題) 我自己覺得有可能是我傳入值的方式錯誤, 但是一直無法試出到底哪裡有問題, 請高手大大幫忙看一下, 底下是Delphi的片段: [code delphi] procedure TForm1.Button1Click(Sender: TObject); var Hbar:THandle; CommOpen : function(hCom:Pointer ;com_port: PChar):apiStatus; stdcall; //這是我要連Com port的 function SetBaudRate: function(hCom:THandle;BaudRate:DWord; ReaderAddr:Byte):apiStatus; stdcall; begin Hbar:= LoadLibrary('Mr915ApiV10.DLL'); IF Hbar >= 32 then { success } Begin CommOpen := GetProcAddress(HBar, 'CommOpen'); SetBaudRate := GetProcAddress(HBar, 'SetBaudRate'); //=============使用函數 //i:= CommOpen(addr(hComHandle),pc); IF (CommOpen(addr(hComHandle),PChar('COM9')) <> 0) THEN //這是連Com Port的地方,一直傳回-3(已確認ComPort是COM9) Begin Label1.Caption := 'Connect Failure!'; End ELSE Begin Label1.Caption := 'Connect Success!'; End; if (SetBaudRate(hComHandle,115200,255)<>0)then begin Label2.Caption := 'BaudRate set Failure!'; end else label2.Caption := 'BaudRate Set Success!'; //==================== FreeLibrary(HBar); FreeLibrary(hComHandle); End Else MessageDlg('Error: could not find Mr915ApiV10.DLL', mtError, [mbOk], 0) end; [/code] 這是C .h檔的片段 [code cpp] typedef struct { unsigned char TagType; unsigned char AntNum; unsigned char Ids[12]; }TagIds; typedef short apiStatus; apiStatus __declspec(dllexport) __stdcall CommOpen (HANDLE * hCom, char *com_port); [/code] 附件附上原始碼的檔案, 請高手大大指教! 非常感激~ |
rick060
高階會員 發表:2 回覆:112 積分:217 註冊:2009-11-17 發送簡訊給我 |
猜測。
照你附上的 .h ,沒有 extern "C" 那就是 c mangling 的問題 vc 以外想要 call 只有去找出真正的名字 用 dumpbin 或 Dependency Walker 查看實際 function name dumpbin 出來如下: 1 0 0001113B ?fndllTest@@YAHXZ = @ILT 310(?fndllTest@@YAHXZ) 則 delphi 需使用已被 mangling 過的名字 module := LoadLibrary('dllTest.dll'); funcEntry := GetProcAddress(module,'?fndllTest@@YAHXZ'); funcEntry;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |