線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1290
推到 Plurk!
推到 Facebook!

以delphi所寫的dll由bcb來call,所產生的問題

尚未結案
mhcjk
一般會員


發表:4
回覆:3
積分:1
註冊:2003-11-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-12 11:41:39 IP:61.219.xxx.xxx 未訂閱
各位大哥可否幫忙,我在delphi dll中宣告了如下的資料。當我的record內的成員不宣告為record是,在bcb中運作正常,但當我成員有record時在bcb宣告就會發生此宣告record的成員沒法傳回,可否告之應如何宣告才可。 type TPFile_info = packed record Record_Count: Longint ; //資料筆數 Record_Length: Longint ; //每一筆資料的長度 File_No: byte; //檔案的標記(例file001則為1..) File_Size: array[0..20] of char ; //檔案size File_Path: array[0..255] of char //檔案所在路徑 end; type TCard_Access = packed record DoorAccessName: array[0..29] of char; DoorAccess: byte; end; type TCard_Struct = packed record Cardnum: array[0..29] of char; password: array[0..3] of char; displayName: array[0..29] of char; Startyear: byte; StartMonth: byte; StartDay: byte; Endyear: byte; EndMonth: byte; EndDay: byte; Use_num: byte; DoubleCardGroup: byte; DoubleMaster_Client: byte; Card_property: byte; DoorAccess:array of TCard_Access; //重點在這兒<~~這兒用了record的陣列 end; //delphi呼叫自己delphi所寫的dll function function GetFile007008(APath:Pchar;Var CardData:array of TCard_Struct;Var Afile7Info,AFile8Info:TPFile_info):boolean;stdcall;external 'GCUDLL.DLL'; 以上為delphi的宣告,在delphi並無問題。 struct TCard_Access { char DoorAccessName[31]; //權限組名稱 unsigned char DoorAccess; //權限組索引 }; //卡號資料 struct TCard_Struct { char Cardnum[30]; //卡號 char password[4]; //密碼 char displayName[30]; //顯示名稱 unsigned char Startyear; //開始有效年份(YY) unsigned char StartMonth; //開始有效月份(MM) unsigned char StartDay ; //開始有效日期(DD(1-32)) unsigned char Endyear ; //卡號無效年份 unsigned char EndMonth ; //卡號無效月份 unsigned char EndDay ; //卡號無效日 unsigned char Use_num ; //可使用次數 unsigned char DoubleCardGroup ; //雙重卡區組代碼(0.無主副卡 1-63主副卡群組別) unsigned char DoubleMaster_Client ; //雙重卡設定為主卡或副卡(0無主副卡1.主卡2.副卡) unsigned char Card_property ; //卡片屬性(1.正常卡2.失效卡3.黑名單) TCard_Access *Card_Access; <~~~~~重點 }; extern "C" {__declspec(dllimport) bool __stdcall GetFile007008(char *APath,const TCard_Struct *ACard_Struct,const int ACard_Struct_Len,TPFile_info &AFile7_Info,TPFile_info &AFile8_Info);}; 在bcb中運作不正常,在 TCard_Access *Card_Access的部份無法傳入。 有點多。請各位大哥幫幫忙,或著告之應如何宣告才是正確的。謝謝
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-12 13:37:57 IP:210.243.xxx.xxx 未訂閱
array of TCard_Access 是 Delphi 所謂的 dynamic array,  BCB 要處理 Delphi DLL 的 dynamic array 可能要動很多手腳..(我沒試過:P)    如果不用 dynamic array 的話, 問題就單純許多了..如 : 1. DoorAccess: ^TCard_Access 2. DoorAccess: array [0..MAC_CARD_ACCESS - 1]  of TCard_Access  兩個方法在 BCB 都能很容易寫出來    另外, alignment 的問題也要注意, delphi 的 packed 在 BCB 要用 #pragma pack(1), #pragma pack(pop) 這部份也要無誤才行  發表人 -
mhcjk
一般會員


發表:4
回覆:3
積分:1
註冊:2003-11-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-15 14:08:55 IP:61.219.xxx.xxx 未訂閱
謝謝您的回覆,非常感謝。 我己修改成DoorAccess: ^TCard_Access。 另發現仍可使用 array of TCard_Access dynamic array,(但要給長度) 然bcb上的宣告以 *TCard_Access即可。 但最重要的一點需加上#pragma pack(1)即可。
系統時間:2024-04-25 18:52:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!