1

最近、Visual C++ Express 2010 を使用して .dll 数学ライブラリの構築を開始したいと考えています。

Excel VBA両方とアプリケーションのライブラリ参照として .dll を使用したいと思いC#ます。32bit/64bit両方のウィンドウで動作することを期待しています。.dll は、ビルド後に他の PC でも使用できるはずです。

  1. Win32 プロジェクトを使用して開始するのは正しいですか? ATL / MFC( Express版では使えないようです)

  2. 関数をロードするには、VBA と C# の .dll で 2 つの異なるインターフェイス セットを指定する必要がありますか? (VBA では __stdcall を使用する必要があります)

  3. 他の PC で .dll を使用するための展開設定はありますか? (regsvr32 コマンド プロセスが必要ですか?)

  4. クラスをエクスポートする C++ DLL を作成するための初心者の例はありますか? (例: VBA / C# は、この dll から新しいクラスをインスタンス化できます) ...

c++ .dll の以下の .header ファイルを使用して、VBA/C# で ClassA と ClassB をインスタンス化できるかどうかわからないためです。

#pragma once

#ifdef DLLDIR_EX
    #define DLLDIR  __declspec(dllexport)   // export DLL information
#else
   #define DLLDIR  __declspec(dllimport)   // import DLL information
#endif 

class DLLDIR ClassA
{
public:
   void AMethod1();
   void AMethod2();
};

class DLLDIR ClassB
{
public:
   void BMethodi();
   void BMethodii();
};
4

2 に答える 2

1

C++ を使用して、COM 型または C スタイルの関数をエクスポートする DLL ファイルをビルドし、32 ビット環境と 64 ビット環境の両方で動作させることはできません。DLL ファイルは一種の PE/COFF イメージであり、PE はファイルごとに 1 つの ISA のみをサポートします (同じイメージ ファイルで複数の ISA を許可する Macintosh 実行形式と比較して)。x86 用と x64 用の 2 回、再コンパイルする必要があります。このルールの唯一の例外は .NET の "AnyCPU" DLL ですが、それは別の話です。

この比較表によると、C++ Express 2010 には x64 コンパイラが含まれておらず、MFC および ATL ライブラリも含まれていませんが、これらは Windows SDK の一部として個別にダウンロードできます。

ご質問への回答:

  1. 個人的には、「空のプロジェクト」テンプレートから始めます。Win32 テンプレートが提供するすべての不要なヘッダーと (一見) 複雑な初期プロジェクト設定が好きではありません。次に、独自の .c/.h/.cpp ファイルを自分で手動で追加し、コードを削除します。
  2. COM 型ではなく関数だけをエクスポートする場合は、インターフェイスについて心配する必要はありません。関数が正しくエクスポートされている限り (ここを参照してください: http://msdn.microsoft.com/en-us/library/ys435b3s%28v=vs.80%29.aspx )、それらは .NET から呼び出すことができます (C# を含む)および VB.NET)、VB6/VBA、および C/C++。
  3. 「他のPC」?
于 2013-03-09T11:31:39.280 に答える
0

#2 については、C# は __stdcall 呼び出し規約も使用できるため、2 組のインターフェイスは必要ありません。

于 2013-03-09T11:30:35.743 に答える