Copyright(c) 2005 Object Oriented XBASE Forum


FoxProからC#を利用する手法

このページではC#でコンポーネントを作成し、FoxProでそのオブジェクトを利用する方法を簡単に説明します。


C#.NET IDEを立ち上げます。新しいプロジェクトクラスライブラリを選択する。
プロジエクト名を 例としてCSHARPFOX (自由に命名)とする。 デフォルト生成コードは以下のとおり


using System;

namespace CSHARPFOX
{
        /// <summary>
        /// Class1 の概要の説明です。
        /// </summary>
        public class Class1
        {
                public Class1()
                {
                        // 
                        // TODO: コンストラクタ ロジックをここに追加してください。
                        //
                }
        }
}

デフォルトのコードを書き換えます。

[サンプルコード例]

using System;
using System.Runtime.InteropServices; // 書き加え
namespace CSHARPFOX
{
        [ClassInterface(ClassInterfaceType.AutoDual)]        // 書き加え
        /// <summary>
        /// testcode
        /// </summary>
        public class testcode
        {
                public string CSTransform(int nNum)
                {
                        string cResult;
                        cResult = "Result :"+ nNum.ToString("###,##0");
                        return cResult;
		}
	}
}

.NET のコマンドラインを起動しsn.exeを実行します。

cd でプロジェクトのあるディレクトリに移動します
[例] プロジェクトのディレクトリは使用者の環境にあわせて書き換えてください。[赤い字がコマンドラインでタイプするコマンドです]
>cd C:\Documents and Settings\Admin\My Documents\Visual Studio Projects\CSHARPFOX

>SN.EXE /k csharpfox.snk
とタイプします。
「キー ペア が 'csharpfox.snk' に書き込まれました」  と表示されます。
プロジェクトディレクトリにcsharpfox.snkが存在することを確認します。


AssemblyInfo.cs ファイルを修正します

[修正箇所]
[assembly: AssemblyKeyFile("")][assembly: AssemblyKeyFile("..\\..\\csharpfox.snk")]

下記は全文

using System.Reflection;
using System.Runtime.CompilerServices;

//
// アセンブリに関する一般情報は以下の 
// 属性セットを通して制御されます。アセンブリに関連付けられている 
// 情報を変更するには、これらの属性値を変更してください。
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]		

//
// アセンブリのバージョン情報は、以下の 4 つの属性で構成されます :
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// 下にあるように、'*' を使って、すべての値を指定するか、
// ビルドおよびリビジョン番号を既定値にすることができます。

[assembly: AssemblyVersion("1.0.*")]

//
// アセンブリに署名するには、使用するキーを指定しなければなりません。 
// アセンブリ署名に関する詳細については、Microsoft .NET Framework ドキュメントを参照してください。
//
// 下記の属性を使って、署名に使うキーを制御します。 
//
// メモ : 
//   (*) キーが指定されないと、アセンブリは署名されません。
//   (*) KeyName は、コンピュータにインストールされている
//        暗号サービス プロバイダ (CSP) のキーを表します。KeyFile は、
//       キーを含むファイルです。
//   (*) KeyFile および KeyName の値が共に指定されている場合は、 
//       以下の処理が行われます :
//       (1) KeyName が CSP に見つかった場合、そのキーが使われます。
//       (2) KeyName が存在せず、KeyFile が存在する場合、 
//           KeyFile にあるキーが CSP にインストールされ、使われます。
//   (*) KeyFile を作成するには、sn.exe (厳密な名前) ユーティリティを使ってください。
//       KeyFile を指定するとき、KeyFile の場所は、
//       プロジェクト出力 ディレクトリへの相対パスでなければなりません。
//       パスは、%Project Directory%\obj\<configulation> です。たとえば、KeyFile がプロジェクト ディレクトリにある場合、
//       AssemblyKeyFile 属性を 
//       [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] として指定します。
//   (*) 遅延署名は高度なオプションです。
//       詳細については Microsoft .NET Framework ドキュメントを参照してください。
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\csharpfox.snk")] // 書き換え部分
[assembly: AssemblyKeyName("")]

ここでプロジェクトをコンパイルする。

project\bin\debug(※注)\〜csharpfox.dllがある
(※注) このサンプルの場合はDebugモードでのコンパイルで説明しています。


.NET のコマンドラインを起動しregasm.exeを実行します。

[例]
>cd C:\Documents and Settings\Admin\My Documents\Visual Studio Projects\CSHARPFOX\bin\Debug

>regasm.exe csharpfox.dll /tlb csharpfox.tlb
Microsoft(R) .NET Framework Assembly Registration Utility 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
型は正常に登録されました。
アセンブリは 'C:\Documents and Settings\Admin\My Documents\Visual Studio Projects\
CSHARPFOX\bin\Debug\csharpfox.tlb' にエクスポートされ、タイプ ライブラリは正常に登録されました。


.NET のコマンドラインを起動しgacutil.exeを実行します。

>cd C:\Documents and Settings\Admin\My Documents\Visual Studio Projects\CSHARPFOX\bin\Debug

>gacutil.exe /i csharpfox.dll


Microsoft (R) .NET Global Assembly Cache Utility. Version 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.

Assembly successfully added to the cache


FoxProからC#で作成したDLLを利用してみます

コマンドラインウインドウに記述します。
PUBLIC oCSobj
oCSobj = CreateObject("CSHARPFOX.testcode")
? oCSobj.CSTransform( 123456 )

Result :123,456

となります
なをオブジェクトの開放は
Release oCSobj です。使用後はかならず開放しましょう。