史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2005-06-21, 02:53 PM   #1
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時
註冊日期: 2002-12-07
文章: 13249
精華: 0
現金: 26241 金幣
資產: 3024051 金幣
預設 VB與C++接軌

C++要寫 windows介面
整體來說 編寫時間上不如 VB 來的快的說

因此看說有人是...
用 C++(VC、BC) 寫運算 (.dll 為主)
VB 設計介面

但找到的都不是很完整
不知有無版友手上有完整範例的說

自己做過的努力如下
運行後是有顯示出 VC++的 MessageBox 內容
但接著就出現

執行階段錯誤'49':
DLL 呼叫格式錯誤

應該是指 參數傳遞 方面的錯誤
不知如何是好 ??

==VB==

Option Explicit
Private Declare Function ShowMsg Lib "test2.dll" Alias "ShowMsgW" (ByVal send As String, ByVal hWnd As Long) As Integer

Private Sub Command1_Click()
Dim send As String

send = "Hello,World!"
Call ShowMsg(send, Me.hWnd)

End Sub

==VC++==

..... //.....前面是專案精靈產生的程式碼,與試驗無關

extern "C" __declspec(dllexport) int ShowMsgW(LPCSTR pText, HWND hWnd)
{
return MessageBox(hWnd ,pText ,"Information" ,MB_OK);
}

====================

後來有想起
C++ 的 int 相當於 VB 的 long
因此
做過 ...(dllexport) int ShowMsgW ...
改成 ...(dllexport) short int ShowMsgW ...


ShowMsg Lib "test2.dll" ...(...) As Integer
改成
ShowMsg Lib "test2.dll" ...(...) As Long

結果亦然
(當然 改成不回傳值 void 也一樣,所以看來問題還是 參數傳遞 方面的錯誤)
mini 目前離線  
送花文章: 1999, 收花文章: 7957 篇, 收花: 26749 次
回覆時引用此帖
舊 2005-06-22, 02:58 PM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時
註冊日期: 2002-12-07
文章: 13249
精華: 0
現金: 26241 金幣
資產: 3024051 金幣
預設

接著無奈下不管37 21
按下編譯 -> test.exe

執行(test.exe) 結果沒出現警訊
??
這次在 VB 上多加個除錯,變成

Option Explicit
Private Declare Function ShowMsg Lib "test2.dll" Alias "ShowMsgW" (ByVal send As String, ByVal hWnd As Long) As Integer

Private Sub Command1_Click()
Dim send As String
On Error GoTo NoDoThing

send = "Hello,World!"
Call ShowMsg(send, Me.hWnd)

Exit sub
NoDoThing:
MsgBox "Error"
End Sub

結果 VB 內就是先正確彈出 VC++的 MessageBox 內容
接著 彈出 VB的 "Error"

同樣 編譯成 test2.exe
執行
只得到 VC++的 MessageBox 內容

??
真是搞不懂,VB 內模擬 與 .exe 情況之差異
mini 目前離線  
送花文章: 1999, 收花文章: 7957 篇, 收花: 26749 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 03:46 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1