プロが教える店舗&オフィスのセキュリティ対策術

VisualStudio2010 VC++でDLLを作成し既存のDelphiXE2アプリで利用したいのですが
MSのサンプルソースそのままでDLLを作成しても、__stdcall;しても、Delphiの読み込み時に
「エントリポイントが見つかりません」と言われます。

http://msdn.microsoft.com/ja-jp/library/ms235636 …
ソースはMSのチュートリアルそのままです。

ためしに VS2010のツール dumpbin.exe /exports ????.dll と中身を覗くと
1 0 ooo11104 ?Add@MyMathFuncs@MathFuncs@@SGNNN@Z
2 1 ,,,,,,,,,,,,,,

のような表示とSummary 以下しか表示されずスタティックライブラリにしても中身は同じです。
それでは、と他のDLLをいくつか覗いてみましたが、大概のDLLやLIBファイルを覗くと
すっきりしたきれいな関数名の一覧がdumpbin /exports で表示されます。

では、DLLになっていないのかというと、作ったDLLを同じVC++でチュートリアル通りに
呼び出すと何の問題もなく使えますので、多分正常なのでしょう。 しかし、どうして
エントリポイントの一覧が見える形にならないのか分かりません。多言語で利用するには
必要かと思います。

VC++で作成したDLLやLibが他の環境で使えないとは考えられないので、なにか、常識的な
部分を知らないのだと思いますが、どなたかよろしくお願いします。

A 回答 (1件)

「DLL エクスポート DEFファイル」あたりで検索して下さい。


http://elksimple.web.fc2.com/memo/dll.html
とか見つかるかと思いますが……。

戻り値や引数の型、数によってdllexportでエクスポートした場合の名前が変わります。
dllimportならば、同じ形式でエクスポート名を生成しますから問題は出ないのですが……
他の環境で使う場合には使いにくいものになります。
extern "C"
とすることで、命名規則が微妙に変わりますが…やはり使いやすいものにはなりません。
defファイルで指定する方法ならば名前は固定化できます。
# ただし、この方法ではクラスは使えない…でしょう。

あと…
[技術者向] コンピューター > プログラミング > C・C++
のカテゴリの方がよろしいかと……。
# まぁ、使うりがDelphiでも、DLL作成はVCのようですし。
    • good
    • 0
この回答へのお礼

ありがとうございました。おすすめのサイトでとても勉強になりました。
私はMSが世界標準だろうから、とても理想的で素直に出来ていると勝手に
思っていました。最近はやりのキネクトセンサーをdelphiのアプリに実装
しようとして今回の問題に直面。defファイルを試して見ましたところ
確かに名前はdumpbin で出てくるのですが、 add = @@?afjadsjfoi@lkjみたいな
表示で、delphiではやはりエントリポイントが見つかりません。と言われます。
他のDLLを覗いてみると _add
_divide
_showFunc
のように整然とエントリポイントの一覧が後半につながっています。
参考書類はどれも簡単にDLLを作り、そのまま使えるように書いてあるのが不思議です。

お礼日時:2012/08/20 21:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!