【PB】powerbuilder呼叫VC編寫的動態連結庫

灰色軌跡發表於2012-07-18

問題:在pb呼叫vc編寫的動態連結庫的時候,報"specified argument type differs from required argument type at runtime in DLL function myFunctionVC4(invalid stack pointer on return from function call) at line 3 in clicked event of object cb_1 of w_main"

(1) DLL中myFunctionVC4函式宣告如下:
extern "C" __declspec(dllexport) long MyFunctionVC4(long xx){
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
return xx;
}

(2)呼叫過程 long ll = MyFunction(10);

為什麼我呼叫的時候,說提示無法訪問被呼叫函式的堆疊哪?經過查閱資料,發現問題解答如下:

(1)VC中函式需要前加 __stdcall 引數宣告
(2)要在.def檔案中定義函式的匯出順序
; MyVCDLL.def : Declares the module parameters for the DLL.

LIBRARY "MyVCDLL"
DESCRIPTION 'MyVCDLL Windows Dynamic Link Library'

EXPORTS
; Explicit exports can go here
;MyVC3 = _MyVC3@4

;這裡的@4是指的MyVC3引數的總Byte數,注意你可以改名,例如MyVC4 = _MyVC3@4真正在外部呼叫時為MyVC4(int)名
MyFunctionVC4 @1 ;這裡的@1表示,這個函式被匯出的順序

你可以用以上兩種方式的任意一種匯出函式

相關文章