1

Visual Studio 2012 pro で新しい dll プロジェクトを作成しましたが、メインの .cpp ファイルは次の行を除いて空です。

#include "stdafx.h"

この dll プロジェクトには、内部にいくつかの関数を追加した新しい C 言語アイテム (モジュール) があります。

実際、メインの .cpp ファイルに、c アイテム (モジュール) から関数を呼び出すいくつかの関数を作成したいと考えています。

たとえば、.cpp ファイルには次のようなものがあります。

void start()

{

   encoder.start();

}

次に、.cpp にコンストラクターを追加して、start() を呼び出せるようにする必要があります。

どうすればいいですか?

これは私のソリューションの例です。2 つのプロジェクトと 1 つのコンソール アプリケーション、1 つの DLL があります。これは、コンソール アプリケーション プロジェクトのメインの cpp ファイルの内容です。

#include "stdafx.h"
#include "targetver.h"

extern "C" {
    void  video_encode_example(const char *filename);
}


int _tmain(int argc, _TCHAR* argv[])
{

    video_encode_example("adi.avi");
    return 0;
}

vide_encode_example は、コンソール アプリケーション プロジェクトで作成したこの c アイテム (ファイル/モジュール) の関数です。example.c というファイルがあり、video_encode_example は example.c にあります。

ここで、ソリューションに新しい dll プロジェクトを追加しましたが、main.cpp ファイルは次の行を除いて空です: #include "stdafx.h"

main.cpp のこの dll プロジェクトでやりたいことは次の 2 つです。

  1. たとえば、関数を作成するには

    void thisstart() { }

次に、この開始関数で、dll プロジェクトで作成した ac ファイル/モジュールにある start() 関数を呼び出したいと思います。

したがって、次のようになります。

void thisstart()
  {
    start();
  }

どこで開始(); cモジュール/ファイルからのものです

次に、この dll を C# で使用します。C# では、thisstart() 関数を使用できるようにしたいと考えています。

編集

これは main.h の内容です:

namespace dllproj{

    extern "C" void start();
    void thisstart();
}

dllproj で 2 つのエラーが発生しています。

  1. エラー 2 エラー C2054: 'namespace' の後に '(' が必要です
  2. 4 IntelliSense: 識別子が必要です

次に、これは現在の cpp ファイルの内容です。

#define dllproj;

#include "stdafx.h"
#include "targetver.h"
#include "main.h"

void thisstart()
 {
     dllproj;::start();
 }

そして、私は2つのエラーが発生しています:

  1. 定義行: エラー 1 エラー C2008: ';' : マクロ定義で予期しない
  2. dllproj;::start(); で エラー 3 エラー C2143: 構文エラー: ';' がありません 前 ':'

完全な解決策を示して、後でCSHARPでどの変数をdllで使用してインスタンスを作成し、cppでこの関数を呼び出すかを説明してください。

たとえば、csharp で dll を追加すると: test = new something(); 次に、test.thisstart();

4

1 に答える 1

1

コメントから「start()は(c言語ファイルi create test.c)のdllプロジェクトにあります」

1) main.h などのヘッダー ファイルを作成し、以下を追加します。

namespace dllproj{

    extern "c" 
    {
       extern void start();
    }
    void thisstart();
}

2) main.h を main.cpp に追加して定義するthisstart()

 void dllproj::thisstart()
 {
     dllproj::start();
 }

__declspec(dllexport)dll でstart() が宣言されていることを確認してください。

于 2013-04-25T16:45:52.147 に答える