遇到以下DLL函式
int __stdcall misposTrans(void* input, void* output)
以及兩個結構體
typedef struct
{
char TransType[2]; //交易指令
char FuncID[4]; //分行特色腳本ID號
char TransAmount[12]; //交易金額
char TipAmount[12]; //小費金額
char TransDate[8]; //交易日期
char MisTraceNo[6];//MIS流水號
char CardNo[19]; //交易卡號
} ST_MISPOS_IN;
typedef struct
{
char TransType[2]; //交易指令
char CardNo[19]; //交易卡號
char Amount[12]; //交易金額
char TipAmount[12]; //小費金額
char TransTime[6]; //交易時間
char TransDate[8]; //交易日期
char ExpDate[4]; //卡片有效期
char Track2[37]; //二磁道資訊
char Track3[104]; //三磁道資訊
char ReferNo[8]; //系統檢索號
char AuthNo[6]; //授權號
char RspCode[2]; //回傳碼
char TerminalId[15]; //交易終端號
char MerchantId[12]; //交易商戶號
char YLMerchantId[15]; //銀聯商戶號
char InstallmentTimes[2]; //分期期數
char TCData[256]; //IC卡資料
char MerchantNameEng[50]; //英文商戶名稱
char MerchantNameChs[40]; //中文商戶名稱
char TerminalTraceNo[6]; //終端流水號
char TerminalBatchNo[6]; //終端批次號
char IcCardId[4]; //IC卡序列號
char BankName[20]; //發卡行名稱
?
} ST_MISPOS_OUT;
請高手指教,這個在VB中要怎么宣告啊
uj5u.com熱心網友回復:
你的結構體型別,成員全是char陣列,在VB6中,都用byte陣列來定義。
只是不知道會不會有“位元組對齊”的問題。
uj5u.com熱心網友回復:
關注一下,用位元組陣列傳參的問題。。uj5u.com熱心網友回復:
用 VC 或其他工具制作一個 tlb,可以避免位元組對齊的問題。uj5u.com熱心網友回復:
對于他的這個,在VB中也有一個比較BT的方法,可以解決對齊問題:兩個引數,分別用一個足夠長度的位元組陣列來接收全部內容;
然后,用MidB()函式,把各個“分量”截取出來。
因為不管DLL那邊如何處理對齊,各個成員的“起始點”是固定的。
具體從第幾位元組開始,VB中呼叫它一次,查看回傳結果就知道了。
uj5u.com熱心網友回復:
的確可以,但是BT得不忍直視。uj5u.com熱心網友回復:
用“byte陣列”組成的自定義型別,你同樣得一個一個的去處理一遍!
實質上并不能省多少事。
uj5u.com熱心網友回復:
我看全部是 char一種型別,就不存在對齊的問題。回頭,試試。只是,在VB中用BYTE比較麻煩。能在C中,把結構轉成字符竄,再傳給VB可能比較好。uj5u.com熱心網友回復:
不要做A語言代碼修改為B語言代碼的無用功。也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/119382.html
標籤:API
上一篇:VB有沒有類似電驢的源代碼??
