• ベストアンサー

C++BuilderやDelphiでVC++用のDLLの作成

C++Builderの画面から新規作成からDLLウィザードを選ぶと、VC++スタイルのDLLを選択して作成できるようになっています。VC++用のDLLを作成出来るとは書かれていません。実際、VC++コンパイラからリンクを拒否されます。 また、VC++用のインポートライブラリをCOFF形式からBorland用のOMF形式に変換するユーティリティCOFF2OMF)は存在していますが、OMF形式をCOFF形式に変換する手法を見かけません。 変換方法を書いているWEBや雑誌記事とかを紹介してください。

  • teo98
  • お礼率27% (68/244)

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

  • ベストアンサー
noname#9119
noname#9119
回答No.1

C++BuilderのDLLウィザードでの「VC++スタイル」はヘルプにあるようにエントリポイントが DLLMain になるだけです。 DLLはC++Builderで作成してもVisualC++で作成しても、どちらからも利用することができます。 MFC拡張など利用する側に対応が必要なDLLは別ですが。 C++BuilderとVisualC++ではインポートライブラリに互換性がありません。 C++Builder の場合は付属のツール implib.exe でDLLからインポートライブラリを生成できますが、VisualC++では簡単な方法はありません。 VisualC++での正攻法は LIB.EXE を使ってインポートライブラリを作成することですが、DEFファイルを書いてやらないといけません。 http://bme.t.u-tokyo.ac.jp/members/manabu/MKL_BCC/mkl_BCC.html のdllからふるいCOFF形式のlibを作成するのところ。 http://www.sun-inet.or.jp/~yaneurao/dlang/Chapter-05.html#050800000000 がもう少し分かりやすいかもしれません。 私の場合は LoadLibrary(), GetProcAddress() で動的に呼び出すか、同じ定義の関数をエクスポートするダミーのDLLを作ってインポートライブラリを得ます。

参考URL:
http://www.sun-inet.or.jp/~yaneurao/dlang/Chapter-05.html#050800000000
teo98
質問者

お礼

広く解決策を説明していただき有難う御座います。以前、VC++のdllをBorlandコンパイラに取り込むときに、DEFファイルを編集したことがありますので、自分の問題は解決できそうです。また、動的呼び出しとか、ダミーの件も、かなり参考になりました。 有難う御座います。

関連するQ&A

  • Borland C++ Builderによるdll作成について

    Borland C++ Builderを使用してプロジェクトをコンパイル してdllを作成する際、コンパイルに成功してあるdllができたとして、 その後プロジェクトに何の変更もなく、再コンパイルすると 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" というのも必要なようですが、こちらの記述も教えて頂けたら嬉しいです。

  • vc++6.0にてdllとlibraryを作成する方法

    vc++6.0にてdllとlibraryを作成する方法 を知りたいのですが、dllとlibraryを それぞれ新規プロジェクトで立ち上げれば 作成できるのですが、dllを作成した際に libraryも作成(自動)されるようなことは できないのでしょうか?

  • BCBで作成したDLLを、VC++で静的リンクさせる方法

    BCBで作成したDLLを、VC++で静的リンクさせる方法 Borland C++ Builderで作成したDLLを、VC++アプリケーションで利用できるように LIBファイルに変換したいのですが、上手くいきません。 下記の手順を踏みました。 1. BCBでDLL作成   「VC++スタイルのDLL」で作成、   「VCLを使う」「CLXを使う」「マルチスレッドを使う」はチェックせず 2. コマンドラインで「IMPDEF.exe」を使用して、dllからdefファイル作成   (IMPDEF.exeは、\Borland\CBuilder6\Binに格納されていた) 3. コマンドラインで「LINK.exe」「LIB.exe」を使用して、defからlibファイル作成   (LINK.exeとLIB.exeは、\Microsoft Visual Studio\VC98\Binに格納されていた) 4. VC++プロジェクトファイルを保存したフォルダに、DLLファイルとlibファイルをコピー 5. VC++の「プロジェクト」-「設定」-「リンク」-「オブジェクト/ライブラリモジュール」に   作成したlibファイルを追加 VC++プロジェクトをビルドすると、下記のエラーメッセージが表示されます。 ///////////////////////////////////////////////////////////////////////////////// dllread.obj : error LNK2001: 外部シンボル "__imp__(関数名)@0" は未解決です LIBC.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Release/dllread.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー ///////////////////////////////////////////////////////////////////////////////// BCBとVC++のバージョンは、下記の通りです。 BCB Professional 6.0 VC++ 6.0 ちなみに、同じDLLを動的リンクで利用することは出来ました。 初心者の質問で申し訳ございませんが、解決策が分かる方がいらっしゃいましたら 教えていただけないでしょうか?

  • VC7で作成したルーチンをC++Builderで使用するには?

    C++ Builder(Ver5)を使って簡単なGUIのアプリが作れるように勉強しています。 最近、あるHPでimplib.exeを使えばVC用のライブラリを取り込めることを知り、市販のライブラリで試したところ、容易に取り込むことが出来ました。 ここでご質問です。 今まで私がVC(Ver7)で作成したコンソールアプリケーションがあります。このときに作ったモジュール群をライブラリにして、BCBで使用したいのですが、VC側でどのように作ったら良いのかわかりません。 VC側でどのテンプレートを選んでどのように作ればBCBで使えるライブラリになるのか教えてください。 ※私はもともと組込み用のソフト開発者なので、Windowsアプリの知識はビギナークラスです。そんな私でも分かるように配慮してもらえると助かります。 以下に示すHPが私の参考にした方法です。 http://gimite.ddo.jp/bcbqtree/qtreemain.cgi?mode=thread&thread=366

  • .NET VC++ DLLの作成方法

    以前VC++6.0でDLLを作成しました。 このときに新規作成の項目からWin32 Dynamic Link Libraryを 選択して作成したのですが、 .NET2003で同様のものを作成したい場合 どのプロジェクトから作成するとできるのでしょうか? .NETになったことで仕様が変更されて同じようにDLLを作成することは できませんか? どなたかお教えください。よろしくおねがいします。

  • Borland C++ Builder > Active-X をつくるには

    こんにちは。 今 Borland C++ Builder 6 (personal)をつかって Active X コントロールを作ろうと思っていますが、 VBのようにウィザードが無いので雛形が無くて 困っています。 この手の情報が少ないので、以下の点について 知っている方教えてください。 1)Borland C++ BuilderでのActiveX作成方法 2)C++ Builder でのサンプルソースがある場所 よろしくお願いします

  • [C++]VC2008のC++がECLIPSE(GCC)で使えない

    VC2008EXPRESSは重いのでECLIPSE(コンパイラはGCC)に乗り換えました。しかしVC2008で作成したプログラムが動きません。 具体的には以下のライブラリを使用しているプログラムなのですがECLIPSEでは認識できないようでエラーになります。 #pragma comment(lib,"ws2_32.lib") このDLLはECLIPSEでは使えないのでしょうか?

  • C++Builder6 + DirectX8 でリンカエラー

    Borland C++Builder6 + DirectX8.1 を使用して DVD を操作するアプリケーションを作成しています。 その中で、IDvdInfo2、及び IDvdControl2 インターフェイスがリンカエラーで使用できません。 エラーの内容は、 [リンカ エラー] 外部シンボル '_IID_IDvdInfo2' が未解決(DVDMAIN.OBJ が参照) [リンカ エラー] 外部シンボル '_IID_IDvdControl2' が未解決(DVDMAIN.OBJ が参照) です。 コードは、 IDvdInfo2 *m_pIDvdI2; m_pIDvdGB->GetDvdInterface(IID_IDvdInfo2, reinterpret_cast<void**>(&m_pIDvdI2)); の様に、SDK のサンプルとまったく同じです。 ライブラリは、 quartz.lib、amstrmid.lib、strmiids.lib の3つをリンクしています。 これらは、coff2omf.exe や implib.exe でコンバートしたりしてみましたが、うまくいきませんでした。 どなたかご存じでしたら、教えて下さい。お願いします。

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

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

専門家に質問してみよう