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メッセージが表示されます。
実績のある回線を送信できますか?このエラーメッセージは、C#interopまたはExcelがあなたに求めていることをサポートしていない何かをしようとしていると言っています。それは古いバージョンのファイルで動作するので、おそらく2003年のsnytaxを使って何かをやるように2010に頼んでいるようです。いくつかのコードを見ることで、それが何であるかを判断できるはずです。 – Pynner
要求通りにいくつかのコードを掲載しました。どちらのファイルも、2010年のファイルを凌駕します。 – user1153715