我進入電影交流寫的DLL函數,原型爲:調用DLL函數
#include "extcode.h"
#pragma pack(push)
#pragma pack(1)
#ifdef __cplusplus
extern "C" {
#endif
void __stdcall PSA_Send_BO(char hostname[], char BO_NumberIn[],
char BO_NumberOut[], int16_t *Status, char Error_text[], int32_t *Error_code,
int32_t *length_BO_NumberOut, int32_t *length_error_text);
long __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);
#ifdef __cplusplus
} // extern "C"
#endif
#pragma pack(pop)
我的Delphi代碼:
procedure Aaa(HostNaam: PChar; BO_To: PChar; BO_From: PChar; ErrorText: PChar;
var OutputLength: LongInt; var ErrorLength: LongInt;
var ErrorNumber: Longint
) ; far; stdcall; external 'aaa.dll'
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
BO_From, ErrorText: Array[0..999] of Char;
ErrorLength, BoLength, ErrorNumber: LongInt;
begin
Aaa(PChar(edtHostName.Text), PChar(edtBoNumber.Text), BO_From, ErrorText, BoLength, ErrorLength, ErrorNumber);
Label1.Caption := 'BO_From = ' + BO_From ;
Label2.Caption := 'BoLength = ' + IntToStr(BoLength);
Label3.Caption := 'ErrorText = ' + ErrorText;
Label4.Caption := 'ErrorLength = ' + IntToStr(ErrorLength);
Label5.Caption := 'ErrorNumber = ' + IntToStr(ErrorNumber);
end;
當我運行這個例子中,返回的字符串BO_From
和ErrorText
是空的,所有其他返回的參數都可以。
當我註釋其中一行顯示返回的參數時,字符串顯示的很好! 使用調試器進入代碼具有類似的效果。 在顯示它們之前複製所有返回的參數不起作用。 返回的字符串的長度遠低於聲明的大小。
有人有任何線索嗎?
在此先感謝您的幫助,
屌
感謝您的回覆。 已經嘗試過你的建議,問題依然存在... – user415496 2010-08-09 20:52:37
哎呀,你不錯! 我現在已經解決了問題,是的,我必須提前設置ErrorLength和BoLength。 謝謝唐老師的建議! – user415496 2010-08-16 07:33:38