VC++で作成したDLLの使用
2010/07/05
DLL作成 で作成したDLLを、C# で利用してみます。
◆環境
OS |
Windows XP Professional Version 2002 Service Pack 3 |
VC |
Microsoft Visual C# 2008 91179-136-7480673-60690 |
まずはプロジェクトを作ります。
[ファイル(F)]-[新規作成(N)]-[プロジェクト(P)]を選択します。
[他の言語]-[Visual C#]-[コンソールアプリケーション]を選択し[OK]を押下します。
プロジェクトができました。
プロジェクトを右クリックし[参照の追加(R)]を選択します。
「参照」タブを選択し、使用するDLLを選択し[OK]を押下します。
エラーが出ました・・・
調べたところ、CLR は1つのプロセスに対して、1つしかロードできないという制約があるらしいです。
作成したDLLも使用しようとしているC#のプロジェクトも .NET Framework 3.5 を指定していたので問題なさそうですがダメみたいです・・・
DllImportでとりあえずは対応できるので、以下のようにソースを修正しました。
Program.cs
|
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class VCDLLTest
{
[DllImport("VCDLLTest.dll")]
public static extern int myAdd(int a, int b);
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("1+2="+VCDLLTest.myAdd(1, 2));
}
}
}
|
|
実行してみます。
エラーが出ました。DLLが見つからないようです。
とりあえず、DLLを手動でDebugフォルダにコピーして実行してみます。
動きました。
DLLファイルの指定をフルパスにしても動作しました。
Program.cs
|
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class VCDLLTest
{
[DllImport("C:\\YMWorld\\VC\\P4\\W4\\P440\\src\\VCDLLTest
\\Debug\\VCDLLTest.dll")]
public static extern int myAdd(int a, int b);
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("1+2="+VCDLLTest.myAdd(1, 2));
}
}
}
|
|
2010/07/13 追記
DLL作成 (CLR) で作成した DLL は参照設定で追加できました。
使用するプログラムは以下の通りです。
Program.cs
|
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using CLRDLL;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
CLRDLLClass cl = new CLRDLLClass();
Console.WriteLine("1+2="+cl.myAdd(1, 2));
}
}
}
|
|
DllImport よりシンプルですね。
▲ PageTop ■ Home
Copyright (C) 2012 ymlib.com