※ ChatGPTを利用し、要約された質問です(原文:C++/CLIで、アンマネージC++のDLLを使用する方法)
C++/CLIで、アンマネージC++のDLLを使用する方法
このQ&Aのポイント
C++/CLIのプログラムで、アンマネージC++のDLLを使用したいと考えています。具体的な手段がわかりません。
VC++6.0で作成したアンマネージC++のDLLを、Visual Studio 2008のC++/CLIプロジェクトで使用しようとしています。コンパイル時に複数のエラーが発生します。
Func.h周りで構文エラーが出ており、Func.hをインポートしないとDllでエラーが発生します。参考になるサイトなどはありませんか?
C++/CLIで、アンマネージC++のDLLを使用する方法
こんにちは。
C++/CLIのプログラムで、アンマネージC++のDLLを使用したいと考えています。
ネット上をいろいろ調べたのですが、具体的な手段がわかりません。
見よう見まねで以下のようにサンプルを作成したのですが、コンパイルすら通る状況になりません。
かなり基本的な問題がありそうで申し訳ないのですが、下記の問題点を教えていただけないでしょうか。
また、参考になりそうなサイトなどありましたら教えていただけると大変助かります。
■アンマネージC++のDLL
VC++6.0で、以下のように、単にデバッグ文字列を書き出すだけのDLL関数を作成しました。
(このDLLが使用できることは他のVC++6.0プロジェクトで確認済みです)
/*-----Func.h-----*/
#ifndef __FUNC_H__
#define __FUNC_H__
AFX_EXT_CLASS void WINAPI ShowMessage();
#endif //__FUNC_H__
/*-----Func.cpp-----*/
#include "StdAfx.h"
#include "Func.h"
#include <stdio.h>
void WINAPI ShowMessage()
{
CString str = "This is The Message from DLL Func!\n";
OutputDebugString(str);
}
■C++/CLI でのDLL使用
Visual Studio2008にて、C++のCLRプロジェクトを作成して、以下のようにDLLを使用する準備を行いました。
1.ソリューションエクスプローラのヘッダフォルダに、Func.hを追加
2.プロジェクトのフォルダに、上記で作成したFuncのDLLとLIBファイルを置く。
3.プロジェクトの「プロパティ > C/C++ > プリプロセッサ > プリプロセッサの定義」に、"_AFXDLL"を追加
4.mainクラスのソースに以下を記述
/*----------*/
using namespace System;
#include "Func.h"
#using "ManagedDllApp.dll"
int main()
{
ShowMessage();
return 0;
}
/*----------*/
この状態でコンパイルすると、
「エラー 3 error C2144: 構文エラー : 'void' は ';' によって先行されなければなりません。 d:\xxx\Func.h 4 Console
」等、Func.h周りで複数のエラーが出ます。
また、Func.hをインポートしないでコンパイルすると、
「エラー 3 fatal error C1113: #using が 'd:\xxx\manageddllapp.dll' で失敗しました。 」と、Dllでエラーが出ます。
よろしくお願いいたします。
お礼
どうもありがとうございました! 無事にビルドが通り、DLL関数が実行されました。 修正点は、以下でした。 1.ご指摘のFunc.hのincludeし忘れの追加 2.メインプロジェクトファイルの"#using XXX.dll"の削除 DLLの使用に関しては、基本的にアンマネージC++のDLL使用と同様と考えて良いようですね。 Func.hで、なぜ追加のincludeが必要になるのか、経験不足のためわからないのですが、勉強しようと思います。 参考文献が少ない中、丁寧に説明してもらって、大変ありがたかったです。