VB6 0軟體呼叫VS C DLL問題解決

2021-08-06 05:16:18 字數 787 閱讀 4671

之前為裝置的dll供客戶二次開發,包括c++,c#等呼叫都沒有問題,以乙個函式為例,c檔案和h檔案裡寫法如下:

uchar chartohex(uchar ch)
extern

"c" __declspec(dllexport) uchar chartohex(uchar ch);//字元轉16進製制

但日前有乙個客戶還在用vb6.0開發,呼叫總是出現:實時錯誤「49」:dll呼叫約定錯誤。

在網上查了一些資料,如下三個地方修改才可以。

c檔案中修改如下:

uchar __stdcall chartohex(uchar ch)
h檔案裡相應修改如下:

extern

"c" __declspec(dllexport) uchar __stdcall chartohex(uchar ch);//字元轉16進製制

原因是vb6.0中呼叫預設是標準的,需要強制轉換成「__stdcall」。

def檔案中需要新增此介面:

; ***dll.def : 宣告 dll 的模組引數。

library

exports

; 此處可以是顯式匯出

chartohex

重新生成解決方案,即可。

總結一下dll函式宣告的一些問題:

dll 匯出函式 _stdcall 和 _cdecl呼叫約定:

VB6 0函式集合

一 型別轉換類函式 1.ctype x 格式 p cbool x 將x轉換為 布林 boolean 型別 p cbyte x 將x轉換為 位元組 byte 型別 p ccur x 將x轉換為 金額 currency 型別 p cdate x 將x轉換為 日期 date 型別 p cdbl x 將x轉...

VB6 0 程式設計入門

識別符號 使用者在程式設計時定義的名稱。關鍵字 vb中擁有固定含義 不能被重新定義的識別符號。常見關鍵字 as 定義乙個變數 date 日期函式 else 條件語句中的 否則 error 錯誤物件 let 屬性定義的關鍵字 me 當前物件 null 表示變數不包含有效資料 nothing 將物件變數...

個人筆記 VB6 0入門

未定義的變數賦值為0 預設 dim m as integer,j as integer,x as single,s as string k 等效於 dim m j x s k 乙個簡單的練習如下 option explicit private sub text1 lostfocus if not i...