2

我是新手 C++ 程序员,使用 C++ Builder XE3,我有很好的 Delphi 背景,我正在尝试使用 INetSharingManager,但它给了我一条错误消息:

E2352 Cannot create instance of abstract class 'INetSharingManager'

这是我使用的代码:

INetSharingManager* NSManager = new INetSharingManager();

我的问题是

  • 如何在 C++ 中正确使用 INetSharingManager?
  • 以及如何在 Delphi 中使用 INetSharingManager,(如果可能的话)

并提前感谢。

4

2 回答 2

1

这是一个接口,你不能这样实例化它。请记住,接口没有实现,因此显然根本没有机会实例化它们。您必须实例化实现该接口的其他东西。

此处的C++ 示例代码展示了如何创建这些家伙之一。这是关键摘录:

CoInitialize (NULL);

// init security to enum RAS connections
CoInitializeSecurity (NULL, -1, NULL, NULL, 
                      RPC_C_AUTHN_LEVEL_PKT, 
                      RPC_C_IMP_LEVEL_IMPERSONATE,
                      NULL, EOAC_NONE, NULL);

INetSharingManager * pNSM = NULL;    
HRESULT hr = ::CoCreateInstance (__uuidof(NetSharingManager),
                                 NULL,
                                 CLSCTX_ALL,
                                 __uuidof(INetSharingManager),
                                 (void**)&pNSM);

此代码来自该库的官方 Microsoft 文档。您应该彻底阅读该文档。

你问如何从 Delphi 使用这个接口。好吧,您所做的与在 C++ 中所做的完全一样。调用CoCreateInstance以获取接口引用。现在您可以看到如何从 C++ 中完成它,将其转换为 Delphi 就很简单了。

于 2013-10-18T23:27:06.707 回答
0

由于答案已经过时,我建议使用以下代码:

HRESULT hr = E_FAIL; 
CoInitialize(nullptr);
INetSharingManager* pNetSharingManager = nullptr;
hr = CoCreateInstance(CLSID_NetSharingManager, 
nullptr,
CLSCTX_ALL, 
IID_INetSharingManager,
reinterpret_cast<LPVOID*>(&pNetSharingManager));

经过测试和工作的代码示例。

于 2019-02-18T13:22:00.693 回答