我有一個用於規劃卡車等如何使用Delphi中的「_pascal調用約定」調用dll?
現在,我們希望使用德爾福2007年 我們有一個DLL中的C++頭路由程序RouteLogix一個dll RL6_dll.dll和工作的例子,在C++ Builder中使用它。
下面是該文件的一個示例:
// Use this routine to find the directory where the data-xxx subdirectories
// are expected.
// char * vszBuf - address of a character array to receive the (null-terminated) path.
// int nBufSize - is the size of the array
// (internally we allow paths up to 256 characters long)
DllFn(void) RL6_GetLocalGeoDir(char *vszBuf, int nBufSize);
我試着從德爾福:
procedure TfrmRL6Xml.Button1Click(Sender: TObject);
var
s1: PChar;
IntValue : Integer;
RL6_GetLocalGeoDir: function(vszBuf: pchar; nBufSize: Integer): integer; stdcall;
begin
handle := LoadLibrary('C:\Carp\RL6_app2\rl6dll\RL6_DLL.dll');
if handle <> 0 then
begin
@DllFn := GetProcAddress(handle, 'RL6_PREINIT');
@RL6_GetLocalGeoDir := GetProcAddress(handle, 'RL6_GETLOCALGEODIR');
s1 := ' ';
IntValue := length (s1);
RL6_GetLocalGeoDir (s1, IntValue);
showMessage(s1);
end;
end;
所以現在我期待S1包含字符串,而是功能似乎處理INTVALUE爲字符串。似乎s1和IntValue參數被交換。我們當然嘗試了RL6_GetLocalGeoDir(IntValue,s1),但那也不起作用。任何建議如何打電話給它?
糟糕,我已經簡化了這個例子。該示例現在已得到糾正。 –
我不認爲它被糾正了,你爲什麼要在'PChar'上調用'Length()'? – mghie
最好使它PAnsiChar和AnsiString,因爲在C中「char」是1個字節的字符。 –