x64 C# アプリケーションで x86 dll を使用したい! フォーラムで、com オブジェクトが役立つことを読みました。これは私の ComServerSample です。x86のようにコンパイルされます。
[ComVisible(true)]
public class MyComServer : IMyComSample
{
private dahuaIp.fDisConnect dissconn;
public void con(int lLoginID, StringBuilder pchDVRIP, int nDVRPort, int dwUser)
{
}
public string GetString()
{
dissconn = new dahuaIp.fDisConnect(con);
var zdsc = dahuaIp.CLIENT_Init(dissconn, 0);
return zdsc.ToString();
}
}
[ComVisible(true), Guid("DBE0E8C4-2222-41f3-B6A4-4E2F353D3D05")]
public interface IMyComSample
{
string GetString();
}
そして、これはこのcomサーバーを使用するためのテストアプリケーションです
Type CSI = Type.GetTypeFromProgID("ComServerSample.MyComServer");
var COMobj = Activator.CreateInstance(CSI);
MethodInfo method = CSI.GetMethod("GetString", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
var sdfc = method.Invoke(COMobj, null);
テストアプリが x86 の場合!この 2 つのアプリケーションは正常に動作します! しかし、テストアプリが x64 の場合、エラーがあります:
次のエラーのため、CLSID {7B9F9A71-8E1B-3470-8A79-EEB4DA9B25A4} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80040154 クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))。
どのように問題を解決しますか? x64 アプリケーションで x86 dll を使用する必要があります。