我遇到了COM組件可見的問題,並且調用了VB6中的某些方法。 我發現的是,如果參數是明確定義的類型(例如字符串),則調用工作正常。如果它們是更高級別的對象,則會引發運行時錯誤「438」,表明屬性或方法不存在。我懷疑這是一個在呼叫中擁有正確簽名的問題,但我無法看到如何正確執行此操作。在VB6中,如何調用需要指向對象的指針的COM對象?
我相信我已經在.NET方面做了一切正確的事情(ComVisible,公共接口等,甚至把它放在一個簡單的例子中)。從類型庫查看器的輸出
看,我有以下幾點:
dispinterface ISimple {
properties:
methods:
[id(0x60020000)]
void Add([in] ISimpleMember* member);
[id(0x60020001)]
ISimpleMember* Create();
};
確定。所以我在我的ISimple接口中有兩種方法。一個需要一個ISimpleMember(Add),而另一個則返回一個ISimpleMember。
VB中的相應代碼如下所示:
Dim item As ISimpleMember
Dim simple As simple
Set item = New SimpleMember
item.S1 = "Hello"
item.S2 = "World"
Set simple = New simple
simple.Add (item) <---- This raised the run time error 438
Set item = simple.Create <---- This works fine, returning me an ISimpleMember
我已經試過幾件事情:1。 昏暗的項目作爲SimpleMember(沒有區別) 2. simple.Add(ObjPtr(項)) - 語法錯誤 3. simple.Add(爲ByRef項目) - 語法錯誤
基本上,運行時間錯誤是一樣的,如果我有 simple.AMethodThatIHaventWritten()
還有,如果我瀏覽在VB6環境引用,Add方法是明確界定:
減少添加(成員作爲SimpleMember)
您是否從下面的代碼中看到了這個想法? :-) – ichiban 2009-06-04 22:56:05