In a Delphi program I m using a DLL to control an external executable. The DLL is written in Visual C++. In C++ the code to use DLL is:
// defining pointer s type to a function compatible with launcher function:
typedef int (WINAPI* PFI_HD_ST_N)(HDC, LPCSTR, int);
…
…
HINSTANCE m_hiDLLCTRL; // handle to DLL instance
PFI_HD_ST_N pfStart; // pointer to function that starts external program
// initialization
m_hiDLLCTRL = NULL;
pfStart = NULL;
// links DLL dynamically
m_hiDLLCTRL = LoadLibrary(“ExtProgCTRL.dll”);
// if DLL has been loaded
If (m_hiDLLCTRL)
// I get the address to funcion that launches ExtProg
pfStart = ( PFI_HD_ST_N) GetProcAddress( m_hiDLLCTRL, “ExtProgStart” );
// launches external program
If ( pfStart )
// hWnd is handle to window where I want do draw
pfStart -> ( GetDC ( hWnd ), “C:\Programs\ExtProg”, 1 );
我在戴尔菲有一样的代码
private
DLLHandle: THandle;
XInt: function: Integer: cdecl;
...
implementation
...
...
DLLHandle := LoadLibrary( ExtProgCTRL.dll );
if DLLHandle <> 0 then
begin
@XInt := GetProcAddress(DLLHandle, ExtProgStart);
if @XInt <> nil then
begin
MessageDlg( Function ExtProgStart loaded ! , mtError, mbOKCancel, 0);
...
...
end;
end;
它似乎工作正确, 但我无法找到 Delphi 代码的最后指令, 启动外部程序...
pfStart -> ( GetDC ( hWnd ), “C:\Programs\ExtProg”, 1 );
戴尔菲什么情况?
我已经改变了:
private
DLLHandle: THandle;
XInt: function(DC: HDC; Text: PAnsiChar; SomeInt: Integer); Integer: cdecl;
...
implementation
...
retval: Integer;
DLLHandle := LoadLibrary( ExtProgCTRL.dll );
if DLLHandle <> 0 then
begin
@XInt := GetProcAddress(DLLHandle, ExtProgStart);
if @XInt <> nil then
begin
MessageDlg( Function ExtProgStart loaded ! , mtError, mbOKCancel, 0);
retval := XInt(GetDC(hWnd), C:ProgramsExtProg , 1);
end;
end;
but now I have on last instruction : retval := XInt... the following error: DCC Error : ( expected but ) found (parenthesis after hWnd)