VC++でDLL、エントリポイントが出来ない?

このQ&Aのポイント
  • VC++でDLLを作成し、DelphiXE2アプリで利用する際にエントリポイントが見つからないという問題が発生しています。
  • 作成したDLLを同じVC++で呼び出すと問題なく使用できるため、DLL自体に問題はないと考えられます。
  • エントリポイントの一覧が表示されず、他のDLLやLIBファイルではきれいな関数名の一覧が表示されるため、何か常識的な部分を知らない可能性があります。
回答を見る
  • ベストアンサー

VC++でDLL、エントリポイントが出来ない?

VisualStudio2010 VC++でDLLを作成し既存のDelphiXE2アプリで利用したいのですが MSのサンプルソースそのままでDLLを作成しても、__stdcall;しても、Delphiの読み込み時に 「エントリポイントが見つかりません」と言われます。 http://msdn.microsoft.com/ja-jp/library/ms235636.aspx ソースは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が他の環境で使えないとは考えられないので、なにか、常識的な 部分を知らないのだと思いますが、どなたかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

「DLL エクスポート DEFファイル」あたりで検索して下さい。 http://elksimple.web.fc2.com/memo/dll.html とか見つかるかと思いますが……。 戻り値や引数の型、数によってdllexportでエクスポートした場合の名前が変わります。 dllimportならば、同じ形式でエクスポート名を生成しますから問題は出ないのですが…… 他の環境で使う場合には使いにくいものになります。 extern "C" とすることで、命名規則が微妙に変わりますが…やはり使いやすいものにはなりません。 defファイルで指定する方法ならば名前は固定化できます。 # ただし、この方法ではクラスは使えない…でしょう。 あと… [技術者向] コンピューター > プログラミング > C・C++ のカテゴリの方がよろしいかと……。 # まぁ、使うりがDelphiでも、DLL作成はVCのようですし。

goropapa
質問者

お礼

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

関連するQ&A

  • エントリポイントがDLLから見つからない

    WIN2000のVC++6.0を使ってWin32DLLを作成して、VBから呼びたいのですが、「エントリ関数がDLLファイル内に見つからない」言われるので、ためしにVCから呼んでみたのですが、表題のようなエラーになります。内容は入門書のサンプル通りに作ってみたのですが・・・ちゃんとEXPORTされていないのでしょうか? [DLL側] <ヘッダファイル> #ifdef XXXX_EXPORTS #define XXXX_API __declspec(dllexport) #else #define XXXX_API __declspec(dllimport) #endif XXXX_API long AddLong(long a, long b); <ソースファイル> XXXX_API long AddLong(long a, long b) { return a + b; } [呼び出し側VC] #include "stdafx.h" #include "XXXX.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { TCHAR s[20]; wsprintf(s,"%d",AddLong(123,456)); MessageBox(NULL,s,"DLLの参照",MB_OK); return 0; } プロジェクトの設定のリンク時のライブラリには XXXX.lib を追加しました。 初めてのDLL作成でよく分かりません。

  • BCBでVC++のDLLを利用するために

    C++Builder5で、VC++で作ったDLLを利用する必要に駆られてしまいました。 提供されているのはDLL本体とヘッダの2点で、BCBからリンクするために、implibを使ってdllからlibの作成をし、プロジェクトに加え、ヘッダをインクルードしました。続けて試しにコードを書いたところ、 '外部シンボル_initialize_libraryが未解決' との表示。(initialize_libraryとはDLL内にある関数です。) 調べてみたところ、 1.呼び出し規約は標準で __stdcall 2.VC++ では、_ がシンボル名の頭に付く 3.Builder ではつかない これで食い違いが生じているんだと思うのですが、更に調べると、モジュール定義ファイルにて再定義をすれば良いとの結論になりました。 BorlandのFAQも見たのですが、書式が理解できなくて・・・そこで質問させて頂きたいのですが、単純にproject名.defを作って、 >IMPORTS >initialize_library=_initialize_library とやってプロジェクトに加えれば良いのでしょうか? ソース本体にextern "C" というのも必要なようですが、こちらの記述も教えて頂けたら嬉しいです。

  • C++ のDLLがdelphiで読めない

    VisualStudio2010C++で作ったDLLをdelphiで利用したいのですが、「エントリポイントが 見つかりません」といわれてしまいます。チュートリアルのサンプルそのままで試して見ましたが、VS2010 付属のdumpbin .exe でdllの中身を見るとエントリポイントが @ILT+345?Add@MyMathFuncs@MathFuncs@@QAGNNN@Z)みたいな、元の関数名はどうした? と思えるような名前です。 defファイルを使って見ましたが、今度は 1 0 0001115E Add = @ILT+345(?Add@MyMathFuncs@MathFuncs@@QAGNNN@Z) みたいな表示でやはりdelphiから読めません。__stdcall にはしています。 VC++で読み込めばちゃんと読めるのである意味正しく作られているのだと思いますが、他のOpenNI , OpenGL などのdllをdumpbin /exports で覗くと、整然と関数名が並び、 これなら読めるだろうと思えますし、実際にdelphiでも使えます。 他の言語ですっきり関数名で呼び出せる(普通の)DLLを作るにはどうすれば良いのでしょうか。 VisualStudioで作ったDLLは呼ぶ側があの記号のような名前で呼べということなのでしょうか?

  • DLLについて

    VC++でDLLを作成しようとしているのですがいくつか判らない点があります。 1. スタティックライブラリとスタティックリンクライブラリの違い。この二つの用語の違いが分かりません。 2.VBからVC++で作成したDLLを使用するときには.libファイルは必要ないのでしょうか。使用しなくても、使うことができたので。

  • VB6で作成したDLLをVC6で使用する方法

    VB6で作成したDLLをVC6で使用できなくて困っています。 以下にトライしたことを示します。 (1) VB6でTRUEを返すだけの関数を入れたActiveX DLLを作成 (2) VC6のLoadLibraryに成功(戻り値がNULL以外) (3) VC6のGetProcAddressに失敗(戻り値がNULL) (4) VC.NET付属のDumpbinユーティリティでは(1)で作成した関数が表示されない。 何が悪いのでしょうか。 宜しくお願いします。

  • VC++ msvcrt.dllについて

    いつもこちらでお世話になっております。 VC++について質問です。 VS2008にてVC++でアプリケーションを作成しました。 作成したPCとは別のPC(VSが入っていないPC)へ作成したアプリケーションをインストールし、 起動しようとしたところ次のようなエラーメッセージが出てきて、起動できませんでした。 the procedure entry point _except_handler4_common could not be located in the dynamic link library msvcrt.dll おそらくmsvcrt.dllが無いといわれているのだと思いますが、dllってアプリインストール時に 無ければ一緒に入れてくれれはしないものなんですか? こういう場合はネットからmsvcrt.dllを探してもってくるしかないのですか? また、msvcrt.dllのmsはマイクロソフトの略だと思うのですが探してみるとマイクロソフトのHP以外でも多数見かけるのですがなぜでしょうか? 初歩的な質問で申し訳ありません。 ご存知のかたいらっしゃいましたらご教授願います。

  • エントリポイントについて

    はじめまして パソコンを起動するたび WlanMon.exe エントリポイントが見つかりません プロシージャエントリポイントapsSearchInterfaceが、ダイナミックリンクライブラリwlanapi.dllから 見つかりませんでした。 という表示が毎回出てくるのですが、どうすれば良いしょうか? 初心者なので ぜひともお教えください

  • エントリーポイントが見つかりません

     Windows Vistaを、新しいHDにクリーンインストールをしたところ、起動するたびに次のような表示がされます。  "WianMon.exe-エントリーポイントが見つかりません。" プロシージャエントリーポイントapsSearchInterfaceがダイナミックリンクライブラリwlanapi.dllからみつかりませんでした。  "W2CLDR2.exe-エントリーポイントが見つかりません。" プロシージャエントリーポイントapsGetReadyがダイナミックリンクライブラリwlanapi.dllからみつかりませんでした。  また、Microsoft Windowsからは  Wireless Lan Monitorは動作を停止しました・・・ "OK"または"×"で画面を消すことはでき、Vistaもきちんと動いているようですが、気にかかります。  どうしてこのような現象が起こるのか、また、解決策があれば、ご教授願います。

  • エントリポイントが見つかりません

    パソコンを立ち上げ時 「WZCSLDR2.exe エントリポイントが見つかりません プロシージャエントリポイントapsGetReadyがダイナミックリンクライブラリWlanapi.dllから見つかりませんでした」と表示されます。 「OK」をクリックすると表示が消えてパソコンはそのまま支障なく、使用できます。その表示が出ないようにする方法を教えてください。 

  • エントリポイントが見つかりません。

    エントリポイントが見つかりません。 プロシージャ エントリ ポイント ?auit@QCoreApplication@@SAXXZ がダイナミック リンク ライブラリ QtCore4.dll から見つかりませんでした。 と、veohで動画を再生させようとすると出るんですがどうしたら出ないように出来ますか?><

専門家に質問してみよう