Visual Studio Expressで64bit版DLLを作成してみる
特電Spartan-6ボードのEZ-USB FX2用ライブラリを64bit化してほしいという依頼をいただきました。そういうわけで、やってみます。
いままではBorland C++でDLLを作っていたのですが、64bit化なのでVisual Studioを試してみることにしました。さて、Express版の2010をインストールしたことがあったので、64bit版のDLLを作ろうとしたら、x64の構成がない・・
Express版ではデフォルトで32bit版しか入っていないので、64bitのコンパイラは後から入れなきゃならないのです。ネットでいろいろと情報を得てきました。
① Windows SDKのダウンロード
まず、「2010-09-27 Visual C++ 2010 Expressで64bitコンパイル(http://d.hatena.ne.jp/torutk/20100927/p1)」という記事を参考にしてWindows SDKをインストールします。必要なのはMicrosoft Windows SDK for Windows 7 ant .NET Framework4というものです。 GRMSDKX_EN_DVD.isoをダウンロードしてきて、ISOファイルをマウントすればCD-ROMに焼かなくても実行できます。
ただし、そのままではインストールできません。途中でエラーになってとまってしまいます。
② 既存のRedistributableの削除
原因と対策は「Windows SDK for Windows 7.1 をインストールするとエラーが発生する(http://www.projectgroup.info/tips/Others/comm_0004.html)」に書かれていました。
Windows SDK for Windows 7.1をインストールする前に、Microsoft Visual C++ 2010 x86 Redistributableと、Microsoft Visual C++ 2010 x64 Redistributableをいったんアンインストールしておく必要があるようです。
③ 改めてWindows SDKのインストール
これでWindows SDKがインストールできるようになるのですが、先のサイトによるとVisual C++ Compilers選択せずにインストールし、あとから更新プログラムの形でVisual C++ Compilersを別途インストールするようです。
まず、SDKをインストール。
そして、Windows SDK 7.1 用 Microsoft Visual C++ 2010 Service Pack 1 コンパイラ更新プログラム(http://www.microsoft.com/ja-jp/download/details.aspx?id=4422)をダウンロードしてインストールすればOKです。121.0 MBです。
④ Visual Studioを64bitアプリの構成にする
プロジェクトで、構成マネージャを開き、プラットフォームの<新規作成>をやります。
今までは32bitしかなかったのですが、上のSDKがうまく入ると・・
このとおり、x64とItaniumが選べるようになります。
プロジェクトの構成はこうなります。
これでコンパイラは64bit版になりました。
⑤ リンクに関するプロジェクトの設定
あと2か所、設定しなければならないところがあります。構成マネージャの全般のここと、
リンカの中のここです。
⑥ LIBファイルの置き換え
なお、いままで使っていた.libファイルもいろいろ置き換える必要があるみたいです。
CypressのAPIを使う際に必要なSetupAPI.Libは、
- C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64\SetupAPI.Lib
をコピーしてきてリンクします。
また、CyAPI.libは
- C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\library\cpp\lib\x64\CyAPI.lib
を使うのだと思います。
⑦ いざビルド
これで、晴れてビルドが通るようになります。
出来上がったDLLが本当に64bit版になっているかどうかを調べるには、dumpbin.exeを使います。
dumpbin.exe /HEADERS ファイル名 と打てば、
このように(x64)であることがわかります。また、/EXPORTSを付ければ、DLLがエクスポートしている関数名も表示されます。
しかし、32bit版のソースをそのまま64bit版コンパイラでビルドしてDLLを作り、アプリケーションを作って動かしてみたところ、停止してしまいました。
何も考えずに移植したのですが、きっと何か間違っていることがあるのでしょう。ポインタのサイズとかかもしれません。
| 固定リンク
コメント
ポルシェコピー:http://www.modernwatch2014.com/goods-copy.asp?bid=63
ブランドコピー時計 http://www.perfect2014.com
投稿: ブランドコピー時計 | 2014.05.13 01:33
お世話になります。プログラム初心者です。
ネットで色々しらべていまして
こちらを見つけましたので
記載させてください。
私も32bit版のソースをそのまま64bit版コンパイラでビルドしてDLLを作りました。
これまで、32Bitのdllを
エクセルVBAより以下の方法でコールしていました。
Declare PtrSafe Function test Lib "C:\test.dll" Alias "_test@8" (ByVal File As String, ByVal in As Integer) As Integer
試してみると
実行時エラー 48 ファイルが見つかりません
出力されます。
PCにインストールされているのは32Bitのエクセルで
64Bitでないとこのようなエラーがでるようです。
そこで、動作確認のためにアプリケーションを作りたいのですが、作り方がわからず困っています。
もしよければ、サンプルプログラムをいただけないでしょうか。
宜しくお願いします。
投稿: ほほ | 2016.03.11 08:00
ここは無料のサポート掲示板ではありません
投稿: なひたふ | 2016.03.11 09:07