サンプル集  >  C#  >  VC++で作成したDLLの使用
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