一直在做java的BS開發,所以不太懂delphi,請教一下大家!
專案里需要做一個介面,由于要呼叫dll,所以只有用js呼叫ocx,ocx作為中間層呼叫介面方的dll,以前已實作過其他介面,所以方案是可行的。
這次呼叫的dll是api方式的(貌似是C寫的),頭檔案如下:
typedef void (WINAPI *Callback)(char *msg); //回呼函式型別
extern "C"
{
void __stdcall SetClientCallback(Callback lpCallback);
void __stdcall Request(const char* EntPara, char* RetPara, short* iRetValue);
}
介面定義:
void Request(char* EntPara[in],char* RetPara[out],Short *iRetValue[in,out])
目前靜態宣告,1:
procedure Dll_Request(var inPara,outPara: PChar;var retPara:array of short);stdcall;external 'miclient.dll' name 'Request';
呼叫
Dll_Request(inPara,outPara,retPara);
呼叫好像有例外
目前靜態宣告,2:
procedure Dll_Request(var inPara,outPara: array of char;var retPara:array of short);stdcall;external 'miclient.dll' name 'Request';
呼叫
Dll_Request(inPara,outPara,retPara);
呼叫后屬性未回傳
求教應該怎么呼叫才能正確
uj5u.com熱心網友回復:
Short *iRetValue對應的翻譯為iRetValue: PShortIntuj5u.com熱心網友回復:
哦 謝謝 我試試
那char* RetPara 用 PChar 還是 array of char 合適一些?
之前一個介面char*用 array of char 呼叫成功了
uj5u.com熱心網友回復:
array of char型別的陣列名實際為指標,只要大小合適,是可以的。最好用pchar,getMem
uj5u.com熱心網友回復:
Request(const char* EntPara, char* RetPara, short* iRetValue);應該是這樣
Request(const EntPara: PAnsiChar; RetPara: PAnsiChar; iRetValue: PShortInt);
uj5u.com熱心網友回復:
array of char換成PChar,不要傳遞array of char這種,不能用以前的來看,不同的dll雖然你看上去他都是Char*,但是實際上內部實作鬼知道他是怎么寫的,一般見著Char*的就用PChar代替就沒有問題!uj5u.com熱心網友回復:
頁面調ocx控制元件 這步確認沒問題吧uj5u.com熱心網友回復:
Delphi的動態陣列在C里面沒有可以對應的型別.這里你還是用Pansichar吧.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/108841.html
上一篇:【求助】win7 和 win8 下,ocx不能建立檔案夾和寫檔案
下一篇:問個gsm短信貓的問題
