以delphi所寫的dll由bcb來call,所產生的問題 |
尚未結案
|
mhcjk
一般會員 發表:4 回覆:3 積分:1 註冊:2003-11-12 發送簡訊給我 |
各位大哥可否幫忙,我在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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |