2016-08-18 88 views
0

好吧,所以:我必須在vb中創建一個.exe文件。這個.exe必須調用一個vb dll,並且該vb dll必須調用一個本機C dll(仍然在那個:()上工作。如何從vb6調用本機C DLL

真正的問題是:我有這個C dll,我試圖這個問題是:每次我嘗試調用它時,它都會給出「錯誤53:找不到文件」,但是!如果我指向另一個DLL在同一個文件中位置(更簡單的一個,無需外接任何包括和狗屎),它的工作原理。

爲什麼呢?我必須包括一些在VB其他項目除了DLL itsels?

@ EDIT1

我已經在C中創建了一個調用該DLL的測試程序,它工作得很好。

我設法做了一些改變,現在我有另一個問題,這是更重要的方式。 :(

我現在可以正常調用一個DLL,事情是這樣的:我創建了一個調用C中的DLL的VB6 EXE 我必須調用的C中的函數名爲「FindPIN」。函數FindPIN用CreateFile打開一個COM端口,意思是:

(IN VB6)調用FindPIN - >(在C DLL中)FindPIN調用CreateFile並保存該端口的句柄 - >返回一個代碼(如< 0錯誤,內容十分重要)

當我打電話FindPIN,它的工作原理,但它總是返回-1功能:。

hSerialComm = Createfile (...); 
if (hSerialComm == INVALID_HANDLE_VALUE) 
    return -1; 

這意味着它無法打開COM端口! :(

,但如果我嘗試運行C exe文件,如:

(IN C.exe)呼叫FindPIN - >(在C DLL)FindPIN調用的CreateFile,並從該端口節省了手柄 - >返回代碼(如< 0錯誤,內容十分重要)。

它工作得很好,和COM口打開!:(

有什麼我在VB6做除了功能的黎民聲明?我正常這樣做,就像

Private Declare Function FindPIN Lib "pin.dll"() As Integer 

:(請幫助我!

+0

我建議,編寫C或csharp的一個簡單的例子,以確保該dll運行良好。 – neohope

+0

首先嚐試'聲明自動函數FindPIN Lib「pin.dll」()作爲整數' – neohope

+0

這是行不通的。在win98兼容模式下運行你的c.exe。 – neohope

回答

0

請發佈您的dll的FindPin函數的c聲明。 我想你的功能不會返回short,但它返回int,這是真的嗎?

然後,你必須聲明在VB中函數的返回值「如龍」不是「作爲整數」,因爲

Integer = short = Int16Long = int = Int32