C# Dll を別の単純なテスト アプリケーション (コンソール、winform など) にインポートするのに苦労しています。
基本的には、欧州共同体の Vat チェック サービスを使用する巨大なライブラリで構成されています (この URL はVat webserviceであると私は信じています) 。
このサービスでは、ライブラリをダウンロードする必要があり、コードの実装はあなた次第です。
私がしたことは、Visual Studio 2010 で新しい C# クラス ライブラリを開始し、Web サービスから自動的にダウンロードされるこのクラスを追加して、Web で見つけたこのスニペットを書きました。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.IO;
namespace EuroVAT
{
public class EuroVAT
{
public static Array check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
return new object[] {country,
vatNum,
valid,
name,
address
};
}
}
}
さて、新しいコンソール アプリケーションを作成するときに、ここでリンク/引用した 2 つのクラスを含むクラス ライブラリ プロジェクトからコンパイルされた DLL に参照を追加します (プロジェクト名を右クリックし、参照を追加し、dll を参照します)。
dllを使用しようとしたコードは次のとおりです。
using EuroVAT;
namespace DLLTEST
{
class Program
{
static void Main(string[] args)
{
EuroVat test = new EuroVat();
}
}
}
基本的に、プログラムから呼び出すことはできません。EuroVAT オブジェクトを呼び出そうとすると得られるのは
エラー 1 タイプまたは名前空間名 'EuroVAT' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)
プロジェクトをビルド、クローズ、再開しようとしました。それをWinformsなどに入れようとしましたが、役に立ちませんでした。私はいつもそのエラーを受け取ります。
私は何を間違っていますか?解決するにはどうすればよいですか?
もう 1 つの質問:
このコードは正確に何をしているのでしょうか?
return new object[] {country,
vatNum,
valid,
name,
address
};
オブジェクトの配列を返すようなものですか? プログラムを実行すると、すべての出力が一緒に破棄されるためです。通常、ある種のループで出力を循環する必要があります...
最後の質問、誰かが助けてくれるなら:
このDLLをSQLサーバーに含める必要があります(2008年だと思います)
この件について読んだところ、C# dll から SQL Server に値を渡すには、さまざまなライブラリを含め、メソッドを SqlProcedures として宣言するだけでなく、値を SqlTypes (SqlInt32、SqlString など) として渡す/取得する必要があることがわかりました。
これが私が思いついたものです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace WebServiceVatEuropa
{
class Program
{
[SqlProcedure]
public static Array check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
return new object[] {country,
vatNum,
valid,
name,
address
};
}
}
}
それが正しいことを願っています。私が見逃しているのは、これらすべてのオブジェクトを SqlInt32、SqlString などの SqlTypes にキャストする方法です。試してみましたが、大量の変換エラーなどが発生しました。それらのオブジェクトと SqlTypes を宣言することはできず、最後の return ステートメントを作成してそれらの SqlTypes を出力することはできません。
可能であれば、誰でも例を示すことができますか?
皆さん、ありがとうございました。