vb中dll 呼叫約定錯誤,VB中DLL 呼叫約定錯誤

2022-02-25 23:43:52 字數 3813 閱讀 1245

1樓:瑞安阿芳

可能是vb中的宣告有問題,把byval去掉試試,即private declare function search lib "c:\libsearch.dll" (s1 as string, s2 as string, s3 as string, s4 as string, s5 as string, s6 as string, s7 as string, s8 as string, s9 as string, s10 as string)

如果還不行,試試把型別改成any看,即

private declare function search lib "c:\libsearch.dll" (s1 as any, s2 as any, s3 as any, s4 as any, s5 as any, s6 as any, s7 as any, s8 as any, s9 as any, s10 as any)

2樓:匿名使用者

dll裡面的char s1[200]換成lpcstr s1

vb 實時錯誤 49 dll呼叫約定錯誤

3樓:生死魔

當然無效啦.shshutdowndialog (wjj)這個引數並不是這樣使用的.你必須獲取許可權.

才能使用這個.而且你的wjj並沒有定義.,這個api在xp和win7下都是一樣呼叫的.

你呼叫這個api是需要做什麼呢?

windows提供有兩個關機用的api.

一個是ntshutdownsystem

另一個是shshutdowndialog

兩個都需要rtladjustprivilege&的許可權

所以你先提示許可權.這樣就可以關閉電源

模組**

public declare function rtladjustprivilege& lib "ntdll" (byval privilege&, byval newvalue&, byval newthread&, oldvalue&)

public declare function ntshutdownsystem& lib "ntdll" (byval shutdownaction&)

public const se_shutdown_privilege& = 19

public const shutdown& = 0 '關機不重啟

public const restart& = 1 '關機並重啟

public const poweroff& = 2 '關機並關閉電源

'上面是rtladjustprivilege下面的是shshutdowndialog定義.你需要哪個就定義哪個.

public declare function shshutdowndialog lib "shell32" alias "#60" (byval ltype as long) as long

public const ewx_logoff = 0  '退出(登出)

public const ewx_shutdown = 1  '關機

public const ewx_reboot = 2  '重啟動

public const ewx_force = 4  '強制關機,即不通知現在活動應用程式讓其先自我關閉

public const ewx_poweroff = 8  '關閉系統並關閉電源

窗體上呼叫

rtladjustprivilege& se_shutdown_privilege&, 1, 0, 0 '提升許可權

call shshutdowndialog(ewx_shutdown) 'shshutdowndialog關機

ntshutdownsystem& shutdown& or poweroff& 'ntshutdownsystem&關機

引數就自己修改吧,模組上面都備註了.

提升許可權那的4個引數分別是

se_shutdown_privilege&, 1, 0, 0根據自己的要求更改吧.

se_shutdown_privilege所需要的許可權名稱,

1為true 就是開啟相應許可權,如果為false 則是關閉相應許可權

0如果為true 則僅提升當前執行緒許可權,否則提升整個程序的許可權

0輸出原來相應許可權的狀態(開啟 | 關閉)

如何讓vb呼叫外部的dll?

4樓:匿名使用者

要宣告一個dll過程,首先需要在**視窗的"通用(general)"部分增加一個declare語句。如果該過程返回一個值,應將其宣告為

function:

declare function publicname lib "libname" [alias "alias"] [([[byval] variable [as type] [,[byval] variable [as type]]...])] as type

如果過程沒有返回值,可將其宣告為sub:

declare sub publicname lib "libname" [alias "alias"] [([[byval] variable [as type] [,[byval] variable [as type]]...])]

預設情況下,在標準模組中宣告的dll過程,可以在應用程式的任何地方呼叫它。在其它型別的模組中定義的dll過程則是模組私有的,必須在它們前面宣告private關鍵字,以示區分。下面分別介紹宣告語句的各個組成部分。

(一)、指定動態庫:

declare語句中的lib子句用來告訴visual basic如何找到包含過程的.dll檔案。 如果引用的過程屬於windows核心庫(user32、kernel32或gdi32),則可以不包含副檔名,如:

declare function gettickcount lib "kernel32" alias "gettickcount" () as long

對於其它動態連線庫,可以在lib子句指定檔案的路徑:

declare function lzcopy lib "c:/windows/lzexpand.dll" _

(byval s as integer, byval d as integer) as long

如果未指定libname的路徑,visual basic將按照下列順序查詢該檔案:

①.exe檔案所在的目錄

②當前目錄

③windows系統目錄

④windows目錄

⑤path環境變數中的目錄

下表中列出了常用的作業系統環境庫檔案。

動態連結庫描述

advapi32.dll高階api服務,支援大量的api(其中包括許多安全與註冊方面的呼叫)

comdlg32.dll通用對話方塊api庫

gdi32.dll圖形裝置介面api庫

kernel32.dllwindows32位核心的api支援

lz32.dll32位壓縮例程

mpr.dll多介面路由器庫

netapi32.dll32位網路api庫

shell32.dll32位shellapi庫

user32.dll使用者介面例程庫

version.dll版本庫

winmm.dllwindows多**庫

winspool.drv後臺列印介面,包含後臺列印api呼叫。

對於windows的系統api函式,可以利用vb提供的工具api viewer查詢某一函式及其相 關資料結構和常數的宣告,並複製到自己的程式中。

vb dll呼叫約定錯誤

5樓:

snd_async是不是沒有寫常量的數值造成這個的?你最好搜尋下這個api的標準介面。

vb中exitfor什麼意思vb中for必須和exitfor成對使用嗎

exit for是退出for迴圈用的,你用for next迴圈的時候,達到某種條件需要退出,就加上內exit for就可以退出for迴圈了。容例程 for i 1 to 100 j j 1 if j 50 then exit for end if next dim i as integer for ...

vb中for迴圈step的問題VB中FOR迴圈STEP的問題

如果沒有其他條件使迴圈變數的值發生變化,當第一次迴圈條件滿足時,step為0將造成死迴圈,當第一次迴圈條件不滿足時,step為0不迴圈 先看這幾句執行時的作用 1 s 0,給s設初值0 2 for i 1 to 5,第一次執行這一句時,對i設初值1,以後每次執行這一句時都判斷i的值是否介於初值和終值...

vb中如何控制字型大小,vb中如何控制字型大小

所有的控制元件都有字型屬性,找到它修改就可以了。如果需要在程式中動態修改也可以的,什麼意思?是說編寫出的運用程式的字型大小還是什麼?ctlnew.font.size 18ctlnew.font.name 宋體 ctlnew.forecolor vbhighlightctlnew.fontbold t...