在將Delphi的Dll文件導出函數改寫成BCB的問題 |
尚未結案
|
afi
一般會員 發表:2 回覆:2 積分:0 註冊:2002-07-03 發送簡訊給我 |
在將Delphi的Dll文件導出函數改寫成BCB的問題
Delphi中這兩句:
TShowFrfReport = function(AppHandle: THandle; ReportName: String;
dstList: TList{; ProcGetValue: TProcFrGetValue = nil}
): TModalResult; stdcall; TPrintFrfReport = procedure(AppHandle: THandle; ReportName: String;
dstList: TList{; ProcGetValue: TProcFrGetValue = nil}
); stdcall; 改寫成BCB後: typedef int (FAR PASCAL dllShowFrfReport)(Handle,String,TList);
typedef void (FAR PASCAL dllPrintFrfReport)(Handle,String,TList); 編譯時有警告(定位到了上述兩句);但能成功。 但在運行提示:
1.調用dll不成功,提示:不正確指針操作。
2.有時調用dll成功了,但在關閉dll中Form時,整個應用程序崩潰。 ================delphi源文件====================
unit uiPrintFr; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, DB; type //FastReport的GetValue事件
//TProcFrGetValue = procedure(const ParName: String; var ParValue: Variant) of Object; TShowFrfReport = function(AppHandle: THandle; ReportName: String;
dstList: TList{; ProcGetValue: TProcFrGetValue = nil}
): TModalResult; stdcall; TPrintFrfReport = procedure(AppHandle: THandle; ReportName: String;
dstList: TList{; ProcGetValue: TProcFrGetValue = nil}
); stdcall; //----------------------------------------------------------------------------// //預覽dll中的報表
function ShowFrfReport(ReportName: String; dstList: TList{;
ProcGetValue: TProcFrGetValue = nil}
): TModalResult; stdcall; implementation //提示窗口
procedure WarningBox(sMsg: String);
begin
MessageBox(0,PChar(sMsg),PChar('提示...'),MB_ICONWARNING OR MB_OK OR MB_TASKMODAL);
end; //預覽dll報表
function ShowFrfReport(ReportName: String; dstList: TList{;
ProcGetValue: TProcFrGetValue = nil}
): TModalResult; stdcall;
var
LibHandle: THandle;
FuncLoad : TShowFrfReport;
begin
LibHandle := LoadLibrary('libPrintFr.dll');
Try
If LibHandle=0 then
begin
WarningBox('無法加載動態鏈接庫:libPrintFr.dll');
Result := mrNone;
Exit;
end;
@FuncLoad := GetProcAddress(LibHandle,'ShowFrfReport');
If @FuncLoad=nil then
begin
WarningBox('無法加載libPrintFrf.dll中的函數:ShowFrfReport!');
FreeLibrary(LibHandle);
Result := mrNone;
Exit;
end;
Result := FuncLoad(Application.Handle,ReportName,dstList);
Finally
FreeLibrary(LibHandle);
End;
end; ================BCB改寫後的源文件==================
#include "Windows.h"
#include "ShareMem.hpp"
#include
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
afi
一般會員 發表:2 回覆:2 積分:0 註冊:2002-07-03 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |