NPObject 上的错误调用方法 - Firefox 插件
Error Calling method on NPObject - Firefox Plugin
我有一段可视化 C++ 代码 (firebreath),可以从可视化 C# 应用程序中检索数据。对于负面情况(returns 值没有 out 参数)通信工作正常,但在正面情况下(returns 值没有 out 参数)显示以下错误。
错误:在 NPObject 上调用方法时出错!
我猜问题出在 Visual C# 应用程序的 out 参数上。任何人都可以帮助我吗?请使用以下代码作为参考。
ngContent.js: (js调用firebreath函数)
function GetDetails(param1, param2) {
try {
return document.getElementById("nGCall").ReturnDetails(param1, param2);
}
catch (e) {
alert("Exception Occured " + e.message);
}
};
nGAPI.cpp:(调用 C# 应用程序的 Firebreath 函数)
FB::VariantList nGAPI::ReturnDetails(std::wstring& param1, std::wstring& param2)
{
try {
InetGuardNPAPI *CSharpInterface = NULL;
//Open interface to C#
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_netGuardIEBHO, NULL, CLSCTX_INPROC_SERVER, IID_InetGuardNPAPI, reinterpret_cast<void**>(&CSharpInterface));
BSTR out1= NULL;
BSTR out2= NULL;
BSTR out3= NULL;
BSTR out4= NULL;
int returns = CSharpInterface->NPGetDetails(param1.c_str(), param2.c_str(), &out1, &out2, &out3, &out4);
if (out1 != NULL && out2 != NULL) {
return FB::variant_list_of(out1)(out2)(out3)(out4);
} else {
return FB::variant_list_of();
}
} catch (...) {
MessageBoxW(NULL, L"Exception occured.", L"NG", NULL);
return FB::variant_list_of();
}
nGHost.cs:(Visual C# 应用程序)
public int NPGetDetails(string param1, string param2, out string out1, out string out2, out string out3, out string out4)
{
int retValue = 0;
out1 = null;
out2 = null;
out3 = null;
out4 = null;
bool userIdentified = IdentifyUser(ngDB, out ngdata);
if (!userIdentified)
return retValue;
try {
out1 = ngdata.abc;
out2 = ngdata.def;
out3 = ngdata.ghi;
out4 = ngdata.jkl;
retValue = 1;
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
return retValue;
}
提前致谢。
您收到的错误表明发生了异常。不幸的是,浏览器在切换到进程外插件时停止暴露异常。我建议附加一个调试器并逐步查看实际发生的情况;或者,添加一些日志记录。
我有一段可视化 C++ 代码 (firebreath),可以从可视化 C# 应用程序中检索数据。对于负面情况(returns 值没有 out 参数)通信工作正常,但在正面情况下(returns 值没有 out 参数)显示以下错误。
错误:在 NPObject 上调用方法时出错!
我猜问题出在 Visual C# 应用程序的 out 参数上。任何人都可以帮助我吗?请使用以下代码作为参考。
ngContent.js: (js调用firebreath函数)
function GetDetails(param1, param2) {
try {
return document.getElementById("nGCall").ReturnDetails(param1, param2);
}
catch (e) {
alert("Exception Occured " + e.message);
}
};
nGAPI.cpp:(调用 C# 应用程序的 Firebreath 函数)
FB::VariantList nGAPI::ReturnDetails(std::wstring& param1, std::wstring& param2)
{
try {
InetGuardNPAPI *CSharpInterface = NULL;
//Open interface to C#
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_netGuardIEBHO, NULL, CLSCTX_INPROC_SERVER, IID_InetGuardNPAPI, reinterpret_cast<void**>(&CSharpInterface));
BSTR out1= NULL;
BSTR out2= NULL;
BSTR out3= NULL;
BSTR out4= NULL;
int returns = CSharpInterface->NPGetDetails(param1.c_str(), param2.c_str(), &out1, &out2, &out3, &out4);
if (out1 != NULL && out2 != NULL) {
return FB::variant_list_of(out1)(out2)(out3)(out4);
} else {
return FB::variant_list_of();
}
} catch (...) {
MessageBoxW(NULL, L"Exception occured.", L"NG", NULL);
return FB::variant_list_of();
}
nGHost.cs:(Visual C# 应用程序)
public int NPGetDetails(string param1, string param2, out string out1, out string out2, out string out3, out string out4)
{
int retValue = 0;
out1 = null;
out2 = null;
out3 = null;
out4 = null;
bool userIdentified = IdentifyUser(ngDB, out ngdata);
if (!userIdentified)
return retValue;
try {
out1 = ngdata.abc;
out2 = ngdata.def;
out3 = ngdata.ghi;
out4 = ngdata.jkl;
retValue = 1;
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
return retValue;
}
提前致谢。
您收到的错误表明发生了异常。不幸的是,浏览器在切换到进程外插件时停止暴露异常。我建议附加一个调试器并逐步查看实际发生的情况;或者,添加一些日志记录。