全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:86
推到 Plurk!
推到 Facebook!

Dell call c++建立的 DLL問題

缺席
blue
中階會員


發表:114
回覆:105
積分:58
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2017-11-08 14:26:34 IP:125.227.xxx.xxx 未訂閱
Hi,各位先進大家好:
有一個問題請教,小弟想用Delphi call 別人作的 DLL 檔案,
在編譯成Release的版本時就會發生奇怪的現象(如無端結束或記憶體存取異常),如果編譯成Debug的版本就正常,
故小弟直接作了一份測試程式,結果也是一樣,
以下是小弟的程式,
呼叫SetIP時確實有顥示 MessageBox兩次,表示呼叫是確實有動作,但返回後出了什麼狀況....?
請各位先進不吝指導,謝謝!
C 部份:
// TestDLL.cpp : 定義 DLL 應用程式的匯出函式。
//
#include "stdafx.h"
#define TestDLL extern "C" __declspec(dllexport)
TestDLL BOOL SetIP(int Port, char* IP)
{
MessageBoxA(0, (char*) IP, "AAAA", 0);
return true;
}

Delphi部份
procedure TForm1.Button1Click(Sender: TObject);
var
IP: AnsiString;
Success: Boolean;
begin
IP := AnsiString('10.1.1.1');
Success := SetIP(80, PAnsiChar(IP));
Success := SetIP(80, PAnsiChar(IP));
end;
附加檔案:5a02a39a703a0_CallDLL.zip
blue
中階會員


發表:114
回覆:105
積分:58
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2017-11-09 14:02:34 IP:125.227.xxx.xxx 未訂閱
Hi,各位先進大家好:
已經找到問題了,
是c 編譯選項的差異, 其預設是 __cdecl,
所以在 Delphi 中調用必須將 stdcall 改為 cdecl,
只是不解為何 Debug mode 不會有問題?
另,如果 c 編譯選項改為 __stdcall, Delphi 也是 stdcall,
卻會找不到該 function,怪怪的
謝謝!
系統時間:2017-11-22 20:51:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!