- PR -

VC++.NET2003によるdllの作成

1
投稿者投稿内容
Chackey
会議室デビュー日: 2005/02/22
投稿数: 3
投稿日時: 2005-02-23 16:01
初めまして、Chackeyといいます。
最近、dllについて、困った事になっています。

VC++.NET2003で、ビルドしたdllが、使えません.
LoadLibraryで、読み込むことは出来るのですが、
GetProcAddressで、関数のポインタを取得することが出来ません。

これと、同じ現象が、VC++6でもありましたが、
その場合は、.defファイルを、プロジェクトに含めることにより、
解決しました。
よって、恐らく、VC++.NET2003で、ビルドしたdllは、
exportされていないものと思われます。

単純なことかもしれませんが、
どなたか、良い知恵を拝借させて頂きたいと思います。

※注1.__declspec(dllexport)を、使用しています。
※注2.dumpbin /exports の結果は当てにならないようです。
※注3.VC++6で、作成したプロジェクトを、VC++.NET2003に、
変換した場合は、うまくいきます。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-02-23 20:32
引用:

これと、同じ現象が、VC++6でもありましたが、
その場合は、.defファイルを、プロジェクトに含めることにより、
解決しました。



同じことを Visual Studio .NET 2003 でもやればいいのでは?

__declspec(dllexport) で関数をエクスポートすると関数名が修飾されるため、ソースコード上で目にしている名前で GetProcAddress() しても関数アドレスが取得できないのです。

これを解決するには .def ファイルを使って、関数のエクスポート名を明示的に指定します。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
Chackey
会議室デビュー日: 2005/02/22
投稿数: 3
投稿日時: 2005-02-24 07:49
早速、回答を頂き、ありがとうございます。

 .defファイルについてですが,
VC++.NET2003は、.defファイルをプロジェクトに含んでも、
駄目なのです。
 ソースコード、及び.defファイルは、VC++6の物と、
まったく同一にも関わらず、関数が読み込めないのです。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-02-24 08:46
引用:

 .defファイルについてですが,
VC++.NET2003は、.defファイルをプロジェクトに含んでも、
駄目なのです。



プロジェクト設定のどこか(リンカのあたりかな?)で、.def ファイル名を明示的に指定することが可能なので、指定してみるとか。


_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
Chackey
会議室デビュー日: 2005/02/22
投稿数: 3
投稿日時: 2005-02-24 12:15
引用:--------------------------------------------------------------------------

プロジェクト設定のどこか(リンカのあたりかな?)で、.def ファイル名を明示的に指定することが可能なので、指定してみるとか。

--------------------------------------------------------------------------------
ひどりさんの指示に従ってやってみました。

プロジェクト>プロパティ>リンカ>入力>モジュール定義ファイル
のところで、編集を選択後、目的の.defファイルを指定しました。

すると・・・うまくいきました!!
大変、お手数をおかけしました。
どうもありがとうございました!!
1

スキルアップ/キャリアアップ(JOB@IT)