C#工程配置如下:
Application->Make assembly COM-Visible 选中
Build->Register for COM interop选中
C#工程代码例子如下:
namespace AAClient
{
[Guid("01236719-60B9-415E-29874E789U08")]
[ComVisible(true)]
public interface IAAClient
{
[DispId(1)]
int GetCount();
}
[Guid("F2D6ACAB-E585-4B8D-B21E-9975AACBD1B1"),
ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[ProgId("ProgId.AAClient")]
public class AAClient : IAAClient
{
int GetCount()
{
int a = 5;
return a;
}
}
}
C++工程中,OCX的工程,加入下面代码:
CoInitialize(NULL);
CComPtr pClient;
HRESULT hr = CoCreateInstance(**___uuidof(__AAClient)_**, nullptr, CLSCTX_INPROC_SERVER, IID_IAAClient,(void**)&pClient);
pClient->GetCount();
上面__uuidof(__AAClient)这句,正常应该是CLSID_AAClient,但是C#生成的没有
上面CoCreateInstance之后返回Class not registered.
我的注册方法如下:
在编译C#的机器上进入C:\Windows\Microsoft.Net\Framework\v4.0.30319
用RegAsm.exe进行注册
依次:
regasm C:.....\AAClient.dll
regasm C:.....\AAClient.dll /tlb: AAClient.tlb
regasm C:.....\AAClient.dll /regfile: AAClient.reg
最后,在上面路径产生一个AAClient.reg,放入我使用的机器进行注册,但是使用的时候,还是提示Class not registered,从注册表看是C#的类AAClient对应的GUID没有注册上,想问问怎么才能注册成功,谢谢