2010-08-31 84 views
0

我需要從VB.NET傳遞2個字符串到爲VB6編寫的OCX。 VS2008在OCX上放置了一個包裝器,但是在調用例程時,字符串參數沒有被正確接收。如何傳遞字符串通過Ref從VB.NET到VB6 OCX?

我不知道爲什麼,但我猜測,這是因爲,據我瞭解,在VB6中參數通過By Ref作爲默認值,而在VB.NET中,參數通過Bv Val作爲默認值。

當我將VSX導入到VS 2008中時,它似乎已自動默認我需要的例程的字符串參數By Val,因爲ocx導出信息沒有指定任何內容。

  1. 反正是有覆蓋VS 2008,這樣我可以正確地傳遞字符串到OCX?

  2. 還有別的,我可以做嗎?

我有30000頁的文件由JSoft,這似乎已經歇業與FastEncrypt加密的,我需要把FastEncrypt到VB.NET程序才能使用它們。

任何幫助將不勝感激。

謝謝。

+3

不是這樣,參數是ByRef還是ByVal是類型庫中籤名的很大一部分。無法猜測它可能是什麼。 – 2010-08-31 11:38:19

+0

你能提供更多的細節嗎?你怎麼知道沒有收到字符串參數?請告訴我們到底發生了什麼,以及你的期望,也許有一些代碼。 – MarkJ 2010-08-31 19:38:46

+0

這個想法是解密一個加密文件。該文件被加密,如FastEncrypt1.EncryptFile(文件名,keystring)。現在使用的調用是FastEncrypt1.DecryptFile(相同的文件名,相同的鍵串)。這在VB6中正常工作,但是當從VB.NET使用時,函數會導致文件被進一步加密。就好像鍵串沒有被正確接收。 – 2010-09-02 05:25:05

回答

0

Microsoft將參數的默認行爲從VB6更改爲VB.NET。在VB6中,默認(如果未指定)是ByRef,而在.NET中默認(如果未指定)是ByVal。

你當然也可以替代默認行爲,並在兩種語言指定任何的ByRef或BYVAL所以如果你是從VB6移植一些代碼,如果它顯示爲

Public Function Foo(blnOption as Boolean) as Boolean 

在VB.NET相當於.NET是

Public Function Foo(ByRef blnOption as Boolean) as Boolean 

。作爲良好的做法,我總是明確地指定它,以便讀取代碼的任何人都知道,並且使代碼更容易移植,因爲您不必記住設置它。

相關問題