我有一个ScreenCameraSDK,它附带一个11kb的dll文件,它还有一个文档,列出了可以使用的功能。它说
ScreenCamera SDK ActiveX参考文档
ActiveX参考
系统上的ActiveX ID是:ScreenCameraSDK.RemoteControl
接口上的每个方法都返回FAIL或SUCCESS。 (0或1)。
在应用程序上创建ActiveX实例,然后调用InitializeScreenCameraRemoteControl。如果返回值为SUCCESS,则正确安装ScreenCamera,然后您可以调用ActiveX接口上的任何其他方法。如果没有找到ScreenCamera,您应该联系支持部门。**
现在我的问题是,我有dll而没有其他文件。如何在Visual Studio 2008的VC ++项目中使用其中的函数。 感谢
我试过以下代码,但是未定义标识符的GOT编译错误
#include <stdio.h>
// This is the path for your DLL.
// Make sure that you specify the exact path.
#import "e:\ScreenCameraSDK.dll" no_namespace
void main()
{
BSTR bstrDesc;
try
{
CoInitialize(NULL);
short st = 2;
short st1;
// Declare the Interface Pointer for your Visual Basic object. Here,
// _Class1Ptr is the Smart pointer wrapper class representing the
// default interface of the Visual Basic object.
_Class1Ptr ptr;
// Create an instance of your Visual Basic object, here
// __uuidof(Class1) gets the CLSID of your Visual Basic object.
ptr.CreateInstance(__uuidof(Class1));
st1 = ptr->MyVBFunction(&st);
}
catch(_com_error &e)
{
bstrDesc = e.Description();
}
CoUninitialize();
}
它说_Class1Ptr是未知的!
答案 0 :(得分:2)
BSTR bstrDesc;
try
{
HRESULT hr= CoInitialize(NULL);
CLSID clsid;
hr = CLSIDFromProgID(OLESTR("<complete class name as see in registry>"),&clsid);
short st = 2;
short st1;
//nameOfClassInOCX is placeholder for explanation. If you OCX com class name is blabla
//use _blabla and so on.
_nameOfClassInOCX * ptr;
hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_nameOfClassInOCX ),(LPVOID*)&ptr);
cout << ptr->GetFees("hi") <<endl;
ptr->Release();
}
catch(_com_error &e)
{
bstrDesc = e.Description();
}
CoUninitialize();
答案 1 :(得分:0)
首先,您必须执行此操作#import dll,编译器将自动生成所有必需的定义。然后使用智能指针或CreateInstance()创建库中的对象。
#import "C:\files\test.dll" no_namespace rename("EOF", "EOFile")
...
int main() {
if (FAILED(::CoInitialize(NULL)))
return 0;
........
::CoUninitialize();
return 0;
}