My ProjectAは、1 つのクラスを含むC#
クラス ライブラリです。
namespace myLib
{
// Interface declaration.
[Guid("Some GUID")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICsClass
{
[DispId(1)]
int Add(int Number1, int Number2);
};
[Guid("Some GUID")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("myLib.CsClas")]
public class CsClas : ICsClass
{
public int Add(int a, int b)
{
return a + b;
}
}
}
生成されたファイルをRegister for com interop
使用して確認しましたが、今まではわかりました。VS2010
dll
tlb
My ProjectBWin32 Dll
単一cpp
ファイルのアプリケーション:
#import "MyLib.tlb" raw_interfaces_only
using namespace MyLib;
...............
#ifdef __cplusplus
extern "C"{
#endif
__declspec(dllexport) long Add(int a,int b)
{
CoInitialize(NULL);
long lResult = 0;
// Use Smart pointer
CComQIPtr <ICsClass> spCoClass;
if (SUCCEEDED (spCoClass.CoCreateInstance(L"myLib.CsClas")))
{
spCoClass->Add(a,b,&lResult);
wprintf(L"The result is %d\n", lResult);
std::cout << "#"+lResult << '\n';
}
CoUninitialize();
return lResult;
}
#ifdef __cplusplus
}
#endif
.......
この Dll をコンパイルすることができ、今のところすべて問題ないようです。
Win32 DLL を使用し、次の行の Add 関数を呼び出してみたときの質問:
SUCCEEDED (spCoClass.CoCreateInstance(L"myLib.CsClas"))
合格することはありません. 問題は何ですか. 正しく登録されていませんか?
よろしくお願いします。