Can't get object clsid from progid
时间: 2024-04-07 10:31:22 浏览: 117
这个错误信息通常是由于注册表中没有相应的 COM 组件导致的。请尝试以下解决方案:
1. 确认你使用的程序集已经安装并正确注册。
2. 如果是 64 位操作系统,请确认你的程序集是 64 位的,并且使用的是 64 位的注册表编辑器。
3. 如果是 32 位操作系统,请确认你的程序集是 32 位的,并且使用的是 32 位的注册表编辑器。
4. 尝试重新注册组件,可以使用命令行中的 regsvr32.exe 工具注册组件。
5. 如果以上方法都无法解决问题,可以尝试重新安装操作系统或者联系组件提供商获得更多帮助。
相关问题
com.jacob.com.ComFailException: Can't get object clsid from progid
com.jacob.com.ComFailException: Can't get object clsid from progid通常是由于无法从给定的progid中获取CLSID而引起的。这可能是由于progid拼写错误或未正确注册所致。以下是一些可能的解决方案:
1.检查progid的拼写是否正确,确保它与注册表中的一致。
2.确保COM组件已正确注册。可以使用regsvr32命令注册组件。
3.尝试使用另一个progid,看看是否可以解决问题。
4.确保程序以管理员身份运行,因为有些组件需要管理员权限才能访问。
以下是一个使用jacob库的Java代码示例,演示如何处理com.jacob.com.ComFailException异常:
```java
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComFailException;
public class Example {
public static void main(String[] args) {
try {
ActiveXComponent component = new ActiveXComponent("progid");
// do something with the component
} catch (ComFailException e) {
System.out.println("Error: " + e.getMessage());
// handle the exception
}
}
}
```
我想要一段c++调用COM组件中yh_call ( _bstr_t ls_in_data, BSTR * ls_out_data, long * appcode, BSTR * appmsg ) 函数的代码
下面是一段简单的 C 代码,用于调用 COM 组件中的 yh_call 函数:
```c
#include <windows.h>
#include <comutil.h>
#include <stdio.h>
int main()
{
HRESULT hr;
CoInitialize(NULL);
// 创建 COM 对象
CLSID clsid;
hr = CLSIDFromProgID(L"YourProgID.YourClass", &clsid);
if (FAILED(hr))
{
printf("Failed to get CLSID.\n");
return 1;
}
IDispatch *pDisp;
hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pDisp);
if (FAILED(hr))
{
printf("Failed to create COM object.\n");
return 1;
}
// 获取 yh_call 函数的 dispatch ID
DISPID dispid;
LPOLESTR funcName = L"yh_call";
hr = pDisp->GetIDsOfNames(IID_NULL, &funcName, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (FAILED(hr))
{
printf("Failed to get function ID.\n");
return 1;
}
// 准备调用参数
VARIANTARG args[4];
VariantInit(&args[3]);
VariantInit(&args[2]);
VariantInit(&args[1]);
args[0].vt = VT_BSTR;
args[0].bstrVal = _com_util::ConvertStringToBSTR("input string");
// 调用 yh_call 函数
DISPPARAMS params = { args, NULL, 4, 0 };
hr = pDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, ¶ms, NULL, NULL, NULL);
if (FAILED(hr))
{
printf("Failed to invoke function.\n");
return 1;
}
// 解析返回值
_bstr_t outData(args[1].bstrVal);
printf("Output data: %s\n", (const char*)outData);
// 释放资源
VariantClear(&args[0]);
VariantClear(&args[1]);
VariantClear(&args[2]);
VariantClear(&args[3]);
pDisp->Release();
CoUninitialize();
return 0;
}
```
在这个示例中,假设 COM 组件的 ProgID 为 “YourProgID.YourClass”,其中包含了 yh_call 函数。在代码中,我们首先通过 ProgID 获取到该 COM 组件的 CLSID,然后创建该 COM 对象的实例。接着,我们通过 GetIDsOfNames 函数获取 yh_call 函数的 dispatch ID,然后准备调用该函数。在调用 yh_call 函数时,我们将输入参数打包成一个 VARIANTARG 数组,然后通过 Invoke 函数调用 yh_call 函数,并传入参数。最后,我们可以通过解析返回的 VARIANTARG 数组来获取 yh_call 函数的返回值。
阅读全文