3

ここは初心者なので、エチケット違反があればお気軽にお知らせください。

私はライブラリのコンパイルが初めてで、(主にこのフォーラムで) オフィスや vba スクリプトをサポートする他のプログラムから参照できるライブラリの構築を研究しています。私はいくつかの良い答えを見つけました。私はこのスレッドからソリューションを正常に実行しました:

シンプルな C# DLL - Excel、Access、VBA、VB6 から呼び出すにはどうすればよいですか?

これには、VBA で C# クラスのインスタンスを作成してから、そのクラスのメソッドを呼び出すことが含まれます (dll を「regasm」する必要があります)。このスレッドで概説されているソリューションに非常に興味があります。

VBA マクロでプログラムによって DLL 検索パスを設定する

最も支持された回答(Panda-34から)は、オブジェクトの作成ではなく、純粋な宣言関数を使用する手段を示しているようです。パンダの答えを正しく理解していれば、このメソッドはツール->参照で参照を設定せずにdllをvbaプロジェクトにロードできます(ChDirで気の利いたトリックを採用しています)。

DeclareFunction を取得して vba コンパイルを渡すことができますが、実行が関数を使用する行に到達すると、「エントリ ポイントを特定できません」というメッセージが表示されます。このエラーに対するすべてのフォーラム ソリューションには、regasm を使用してクラスを dll に登録し、クラスのインスタンスを作成できるように参照を設定することが含まれます。私の質問は次のとおりです。

1) パンダのソリューションでは、dll にまだ regasm が必要ですか?

2) C# 関数は常にクラスにラップされているため、C# を使用してこのソリューションを実装することは不可能ですか? Test.dll の Class1 と Class2 の両方に HelloWorld() メンバーがある可能性があるため、dll のグローバル レベルでは表示されないメソッドで Declare Function を宣言できないことが問題なのかどうか疑問に思い始めています。 . もしそうなら、とにかくC++の方が好きです(私のマシンにはclではなくcscがあるので、C#を少し学んでいます)。

この質問に対して新しいスレッドを開始するべきではなかった場合は申し訳ありません。私はSOが初めてなので、パンダの答えにコメントする権限がありません。具体的には、あなたの答えで誰かの答えについて別の質問をしないように言っているので、新しいスレッドを開始することを意味すると考えました...

4

1 に答える 1

0

C# は、MSIL のすべての機能をサポートしているわけではありません。グローバル関数はその 1 つです。したがって、C# でグローバル関数を使用することはできません。これは言語の一部ではありません。ex には Managed C++ が必要です。私の経験では、regasm に登録された COM フレンドリーな c# アセンブリとコードベース スイッチを使用するのが最善の方法です。

于 2012-12-14T08:32:28.613 に答える