原C++代码: int SS_Send_String(const int addr,const int Width,const int Height, const int Effect,
const int Speed,const int Delay,const int Color,const char *DataString)
改DELPHI: function SS_Send_String(addr:integer;Width:integer;Height:integer; Effect:integer; Speed:integer; Delay:integer; Color1:integer; DataString:pchar):integer;stdcall;external 'pTpSend.dll';
运行时出错!
const int Speed,const int Delay,const int Color,const char *DataString)
改DELPHI: function SS_Send_String(addr:integer;Width:integer;Height:integer; Effect:integer; Speed:integer; Delay:integer; Color1:integer; DataString:pchar):integer;stdcall;external 'pTpSend.dll';
运行时出错!
最好也设置下delphi中形参为const
在BC++ 调用是正常的.
{int ret;
AnsiString str; str = this->Edit1->Text;
this->Caption = "......";
Application->ProcessMessages();
HINSTANCE Hinst = NULL;
try
{
Hinst = LoadLibrary(dllfile.c_str());
if(Hinst)
{
SS_Open_Com_PDJ = (TSS_Open_Com_PDJ *)GetProcAddress(Hinst,"SS_Open_Com_PDJ");
SS_Close = (TSS_Close *)GetProcAddress(Hinst,"SS_Close");
SS_Send_String = (TSS_Send_String *)GetProcAddress(Hinst,"SS_Send_String");
if(SS_Send_String!=NULL && SS_Close!=NULL && SS_Open_Com_PDJ!=NULL)
{
ret = SS_Open_Com_PDJ(cmbComPort->ItemIndex,cmbRate->ItemIndex,cseDelay->Value);
if(ret==0)
{
ret = SS_Send_String(cseAddress->Value,cseWidth->Value,cseHeight->Value,cmbEffect->ItemIndex+1,
cseSpeed->Value,csePlayDelay->Value,cmbColor->ItemIndex,str.c_str());
SS_Close();
}
}
else ret = -1;
FreeLibrary(Hinst);
}
}
catch(...)
{
ret = -2;
}
this->Caption = "Ret: " + IntToStr(ret);
}
---- 我有DELPHI 代码:
var D: integer;
DLLHandle: THandle;
SS_Open_Com: TSS_Open_Com;
SS_Close: TSS_Close;
SS_Send_String: TSS_Send_String;
begin
DLLHandle := LoadLibrary('pTpSend.dll'); try @SS_Open_Com := GetProcAddress(DLLHandle, 'SS_Open_Com');
@SS_Close := GetProcAddress(DLLHandle, 'SS_Close');
@SS_Send_String := GetProcAddress(DLLHandle, 'SS_Send_String');
if (Assigned(@SS_Open_Com)) and (Assigned(@SS_Close)) then begin
SS_Open_Com(0, 9600, 5);
D := SS_Send_String(1, 80, 32, 1, 1, 5, 0, pchar(Edit1.Text));
SS_Close;
end;
Edit2.Text := FloatToStr(D);
FreeLibrary(DLLHandle); finally FreeLibrary(DLLHandle); end;----- 没有返回