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 つです。
たとえば、関数を作成するには
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 つのエラーが発生しています。
- エラー 2 エラー C2054: 'namespace' の後に '(' が必要です
- 4 IntelliSense: 識別子が必要です
次に、これは現在の cpp ファイルの内容です。
#define dllproj;
#include "stdafx.h"
#include "targetver.h"
#include "main.h"
void thisstart()
{
dllproj;::start();
}
そして、私は2つのエラーが発生しています:
- 定義行: エラー 1 エラー C2008: ';' : マクロ定義で予期しない
- dllproj;::start(); で エラー 3 エラー C2143: 構文エラー: ';' がありません 前 ':'
完全な解決策を示して、後でCSHARPでどの変数をdllで使用してインスタンスを作成し、cppでこの関数を呼び出すかを説明してください。
たとえば、csharp で dll を追加すると: test = new something(); 次に、test.thisstart();