質問

Borland C ++コードには次のメソッドがあります

static bool UploadBitstream(void)
{
   //Some code Implementation
}

そしてそれをDLLに変換し、C#でアクセスしようとしています。

コードDLLの変換に必要な手順 その後、C#で使用しますか?

役に立ちましたか?

解決

最初に、メソッドが外部で定義されていることを確認する必要があります。次に、メソッドstdcallまたはpascal呼び出し規約を宣言し、それらにdllexportをマークする必要があります。以下のコードリストを参照してください(これは私にとって古くからの記憶なので、最新のBorland C ++コンパイラに少しでもお気をつけください)。

// code.h
extern "C" {

#define FUNCTION __declspec(dllexport)

FUNCTION int __stdcall   SomeFunction(int Value);    

メイン

#include "code.h"

FUNCTION int __stdcall SomeFunction(int timesThree)
{
    return timesThree * 3;
}

他のヒント

DLLをコンパイルしたら、DLLImportプロパティを使用するだけで、.NETでDLLにアクセスする必要があります。

public class stuff
{
    [DLLImport("somedll.dll")]
    public static extern void UploadBitstream();
}

ポインターまたはそのようなものが必要な場合はより複雑になりますが、void関数の場合は簡単です。

その関数を呼び出すと、dllがプログラムによってロードされ、プログラムが終了するまで解放されないことに注意してください。 DLLを動的にロードできますが、それははるかに複雑です。必要に応じてここで説明できます。

用語をご覧ください。
この例では、UploadBitstreamはメソッドではなく関数です。
クラスのメソッドである場合、Borlandコンパイル済みDLLのクラスを使用するのは非常に困難です。

コードが実際にはC ++ではなくCであれば、互換性のあるDLLを作成できるはずです。 C ++ Builderを使用した単純なCスタイル関数用。

次のSO質問を参照してください。 dllを使用するC ++プログラム。 (borland c ++ビルダーおよび一般) ここで、互換性のあるDLLの作成にも適用されるさまざまなコンパイラ設定をリストします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top