2012-01-17 31 views
1

ExcelでVBAから呼び出すCOM可視C#ライブラリを使用しています。呼び出されるC#メソッドには、refによって渡された引数が含まれます。私は私のExcelファイルの以前のバージョンではVS2010は、Office 2010、.NETフレームワーク4VBA/C#COM interop - エラー430

  • を使用しています、ライブラリの呼び出しがありませんまだ正常に動作します。

  • 新しいバージョン(C#ライブラリの呼び出し自体は変更されていません)では、VBAがライブラリを呼び出すことができますが、C#メソッドが終了すると、ランタイムエラー430 "期待されるインターフェースをサポートしていません "。私はそれを見るためにDEBUGモードを使いました。同じファイルで、VBAは展開された.NETライブラリを呼び出すことを管理します。

    私が試した何

: - 再追加VBAでのOLEオートメーションライブラリへの参照を。 - C#ライブラリの再コンパイル

私は何が間違っている可能性があるのか​​困惑しています。私の古いファイルが動作して以来、Excel自体は問題ではないようです。 C#ライブラリは私の古いファイルからも呼び出されるので、問題はライブラリから来てはいけません。私のファイルがCOM可視ライブラリを呼び出す能力については、別のC#ライブラリへの呼び出しが機能します(そのファイルがデプロイされています)。

ご協力いただければ幸いです。


次のようにCSHARPにVBA呼び出しは次のとおりです。

Dim csharptoolsDispatch As Object 
Set csharptoolsDispatch = CreateObject("Dispatch.Caller") 
Dim a as string 
ReDim input(0 to 5) as single 
ReDim output(0 to 5) as single 
a = csharptoolsDispatch.solveDispatch(2, False, input, output) 

C#は次のようになります。

-interface

namespace Dispatch 
{ 
    public interface iCaller 
    { 
     string solveDispatch(int a, bool flag, float[] input, ref float[] output); 
    } 
} 

-Class

namespace Dispatch 
{ 
    [ClassInterface(ClassInterfaceType.None)] 
    [ComVisible(true)] 
    public class Caller : iCaller 
    { 
     public string solveDispatch(int a, bool flag, float[] input, ref float[] output) 
     {  
      //code 
      return "ok"; 
     } 
    } 
} 

Csharpメソッドへの呼び出しは正常に動作し、Csharpは正常に動作し、「戻り値」の直後に「フォーカス」がVBAに戻ったときにエラー430メッセージが表示されます。

+0

実績のある回線を送信できますか?このエラーメッセージは、C#interopまたはExcelがあなたに求めていることをサポートしていない何かをしようとしていると言っています。それは古いバージョンのファイルで動作するので、おそらく2003年のsnytaxを使って何かをやるように2010に頼んでいるようです。いくつかのコードを見ることで、それが何であるかを判断できるはずです。 – Pynner

+0

要求通りにいくつかのコードを掲載しました。どちらのファイルも、2010年のファイルを凌駕します。 – user1153715

答えて

2

私はそれを整理することができました。

後で、間違いなく間違いがありましたが、VBAとC#の間のCOM相互運用インターフェイスからの奇妙な動作は、検出するのが難しくなりました。

C#へのVBA呼び出しでは、引数の中に、C#でintのテーブルとして定義されたsingleのテーブルがありました。その議論はrefで渡された。

このような場合、私はVBAが「無効な議論」とか何かを言うとクラッシュすると思います。代わりに、C#への呼び出しを可能にするintへの単一の暗黙のキャストがあるようです。 その後、csharpメソッドが終了すると、VBAはrefで渡された引数とそれが変更された型の意味を理解できないように見えます。それは430エラーを引き起こします。

私の以前のバージョンには間違いがありませんでした。

私はremakeberする必要がありますVBA 非常に弱く型付き!

とにかく、謎解き!

関連する問題