« ZYNQのADCボード DDR3 SDRAMの配線がほぼ完了 | トップページ | 春の学生アルバイト大募集! »

2014.04.17

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をインストール。

X64dll_1

そして、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がうまく入ると・・

X64dll_2

このとおり、x64とItaniumが選べるようになります。

X64dll_3

プロジェクトの構成はこうなります。

X64dll_4

これでコンパイラは64bit版になりました。

⑤ リンクに関するプロジェクトの設定

あと2か所、設定しなければならないところがあります。構成マネージャの全般のここと、

X64dll_5

リンカの中のここです。

X64dll_6

⑥ 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

を使うのだと思います。

⑦ いざビルド

これで、晴れてビルドが通るようになります。

X64dll_7

出来上がったDLLが本当に64bit版になっているかどうかを調べるには、dumpbin.exeを使います。

dumpbin.exe /HEADERS ファイル名 と打てば、

X64dll_8

このように(x64)であることがわかります。また、/EXPORTSを付ければ、DLLがエクスポートしている関数名も表示されます。

しかし、32bit版のソースをそのまま64bit版コンパイラでビルドしてDLLを作り、アプリケーションを作って動かしてみたところ、停止してしまいました。

X64dll_9

何も考えずに移植したのですが、きっと何か間違っていることがあるのでしょう。ポインタのサイズとかかもしれません。

|

« ZYNQのADCボード DDR3 SDRAMの配線がほぼ完了 | トップページ | 春の学生アルバイト大募集! »

コメント

ポルシェコピー: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

コメントを書く



(ウェブ上には掲載しません)




« ZYNQのADCボード DDR3 SDRAMの配線がほぼ完了 | トップページ | 春の学生アルバイト大募集! »