開発メモ

カテゴリ:IT

コメント(0) / この記事のURL

開発メモです。
あくまでメモなので、プログラムやってる人でないとわからないと思いますがあしからず。

ちょっと自分用で、DBに接続するGUIツールを作成中。
UIの部分はC#で、DBと直接やり取りする部分については、C++のDllにしようとやってみていたのですが…なかなか苦戦。

一般に言うDLLには、以下の3種類があるらしい。

(1) Win32 DLL
(2) COM
(3) CLR

DLLをC#上のプロジェクトに参照の追加するとき、
(2)と(3)のDLLは.Netアプリケーションと相性がいいので、
普通に「参照の追加」で追加できるそうです。

一方(1)のWin32 DLLの場合は、参照の追加では追加できず、
「’~.dll’への参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください。」とエラーメッセージが表示されてしまう。

そのため、直接実行ファイルのフォルダ内に置くか、システムフォルダ内に置くことで参照することができるそうです。
C#側では、クラス内に以下のように参照DLL名と、メソッド名を記述して、
[DllImport("DbTool.dll")] public static extern void Init();
あとは普通に関数を使用します。この時、C++とC#との型の対応は以下の通り。

HANDLE (void *) → System.IntPtr
BYTE (unsigned char) → byte (System.Byte)
SHORT (short) → short (System.Int16)
WORD (unsigned short) → ushort (System.UInt16)
INT (int)、LONG (long)int → (System.Int32)
UINT (unsigned int)、
DWORD, ULONG (unsigned long) → uint (System.UInt32)
BOOL (long) → bool (System.Boolean)
CHAR (char) → char (System.Char)
LPSTR (char *)、
LPWSTR (wchar_t *) → System.Text.StringBuilder
LPCSTR (const char *)、
LPCWSTR (const wchar_t *) → string (System.String)
FLOAT (float) → float (System.Single)
DOUBLE (double) → double (System.Double)
参照URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html

それか、CLR DLLをラッパーにして参照するということもできるらしい。 http://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_03.html

あと、Visual Studio2010のVC++の対象.Net Framework番号を変えるには、
vcxprojファイルを直接エディタで開いて、
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
という風になっている部分を、v2.0とかにすれば、.Net Framework2対象になるようです。
TargetFrameworkVersionタグがvcxprojに存在しない場合は、

<PropertyGroup Label="Globals">
 ~~
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
</PropertyGroup>
という感じで、PropertyGroup Label属性=”Globals"の内部に追加するそうです。

参照URL:http://blog.brichan.jp/post/2010/08/28/Visual-C2b2b-2010-Net-Frameworke381aee3838fe383bce382b7e383a7e383b3e5a489e69bb4.aspx

コメント(0) / この記事のURL