ここから本文です

VC++向けのC#クラスライブラリ(dll)の作成方法を教えてください。

pinkmicky7さん

2012/4/416:53:11

VC++向けのC#クラスライブラリ(dll)の作成方法を教えてください。

VC#で作成したdllをVC++で参照し、実行したいです。

VC++で「LoadLibrary」後、「GetProcAddress」で
dll内の関数(メソッド)を実行する流れです。

現状ですが、GetProcAddressで関数名又は序数を指定し、
関数のアドレスを取得するところで「NULL」を返され失敗しています。

そのため、正しいVC++向けの
VC++でのDLLの作成方法(関数の定義やエクスポート)を
ご存じの方、教えていただけませんか?


この質問に関連する、自分の別質問は以下のリンクにあります。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1084851755
上記の質問にて、GetProcAddressがNULLか判定せず、関数を実行しているので
エラーが発生したことは理解しました。

皆さん回答をよろしくお願いします。

補足livingintheblueshadowsさん回答ありがとうございます。
質問に誤字がありました。
「VC++向けのVC++でのDLLの作成方法」ではなく、
正しくは「VC++向けのVC#でのDLLの作成方法」です。
申し訳ありませんが、回答をお願い致します。

閲覧数:
4,252
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

las********さん

2012/4/419:43:24

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

編集あり2012/4/600:15:56

タイトルは

>VC++向けのC#クラスライブラリ(dll)の作成方法を教えてください。

となってるけど、

>正しいVC++向けの
>VC++でのDLLの作成方法(関数の定義やエクスポート)を

ということなので、

VC++ のプログラム ( アンマネージド ) から呼び出せる DLL の、VC++での作り方

ということでいいんだよね?

VC++でプロジェクトを新規作成するとき、「Win32プロジェクト」を選択

Win32 アプリケーション ウィザードの「アプリケーションの種類」で「 DLL 」を選択

完了

extern "C" __declspec(dllexport) int foo( int a, int b )
{
return
}

のような関数を作り、作成される dll が test.dll だとすると、

DLLのプロジェクトに .def ファイルを追加して

======================
LIBRARY "test"

EXPORTS
foo
======================

のようにしてやると


======================
typedef int (__stdcall *FUNC)( int a, int b );

int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hDll = LoadLibrary( "test.dll" );
if( hDll ) {
FUNC fun = ( FUNC )GetProcAddress( hDll, "foo" );
if( fun ) {
int c = fun( 100, 23 );
printf( "%d\n", c );
}
}

return 0;
}
======================

のようにして呼び出すことが可能。



補足に対して
前にも書いたし、他の人も書いてるけど、COM経由で呼び出すか、C++/CLR(マネージド)にして呼び出すかしかないんじゃないかな。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる