我正在尝试读取这样的ADOBD.Recordset对象(我的第一次,所以原谅我的"noobness":D):
Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
foreach (var category in categories.Fields) // here is where I get the exception
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
ListAll调用工作正常 - 我得到Recordset一些数据,我通过对对象执行QuickWatch确认.但是当代码到达categories.Fields时,我得到以下异常:
无法从程序集"TestCOMCalls,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"加载类型"ADODB.FieldsToInternalFieldsMarshaler".
我用谷歌搜索了这个错误(或者只是通过'ADODB.FieldsToInternalFieldsMarshaler'找不到任何可以帮助我解决问题的东西).
我想知道,我错过了一个参考?除了正常的引用,我已经将这个添加到我的项目中:
ADODB Microsoft ActiveX数据对象2.5库C:\ WINDOWS\assembly\GAC\ADODB\7.0.3300.0__b03f5f7f11d50a3a\ADODB.dll
就像我说的那样,我以前从未这样做过,但通过谷歌搜索,我能够看到一些人这样做(foreach on the object.Fields),它似乎适合他们.
非常感谢任何帮助或方向:)
谢谢!
这在某种程度上是对这里答案的后续行动.
我有一个自定义ActiveX控件,它引发了一个事件(带有"msg"参数的"ReceiveMessage"),需要在Web浏览器中由Javascript处理.从历史上看,我们已经能够使用以下仅IE语法在不同项目上实现此目的:
function MyControl::ReceiveMessage(msg)
{
alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
但是,当在掩埋控件的布局内部时,Javascript无法找到控件.具体来说,如果我们把它放到一个普通的HTML页面,它工作正常,但如果我们将它放入由<Form>标签包装的ASPX页面,我们会得到一个"MyControl is undefined"错误.我们尝试过以下变体:
var GetControl = document.getElementById("MyControl");
function GetControl::ReceiveMessage(msg)
{
alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
...但它会导致Javascript错误"GetControl未定义".
处理从ActiveX控件发送的事件的正确方法是什么?现在我们只对在IE中工作感兴趣.这必须是我们正在做的自定义ActiveX控件.
谢谢.
我有一个.NET 2.0 WebBrowser控件,用于导航一些没有用户交互的页面(不要问......长篇故事).由于此应用程序的用户性质较少,我已将WebBrowser控件的ScriptErrorsSuppressed属性设置为true,VS 2005状态中包含的文档将"隐藏其源自底层ActiveX控件的所有对话框,不只是脚本错误." 但是,MSDN文章没有提到这一点.我已经设法取消了NewWindow事件,这会阻止弹出窗口,因此需要处理.
任何人都有使用其中一个并成功阻止所有对话框,脚本错误等的经验?
编辑
这不是IE的独立实例,而是生成在Windows窗体应用程序上的WebBrowser控件的实例.任何人都有使用此控件或底层AxSHDocVW的经验吗?
再次编辑
对不起,我忘了提这个...我试图阻止一个JavaScript警报(),只需一个OK按钮.也许我可以转换成IHTMLDocument2对象并以这种方式访问脚本,我已经使用过MSHTML了,有人都知道吗?
在尝试使用ASP.NET MVC设计S3应用程序并尝试保持HIPAA兼容时,我遇到了一些问题.
我最初的计划是要求与我的网络服务器建立SSL连接,加密我服务器上的图像,然后使用我的私钥将它们发送到s3.
这是我明显的担忧:
说图像将被加密,因为您将通过https连接到我的服务器仍然不保证所有浏览器都不会缓存数据.
甚至不能考虑具有到期选项的"查询字符串",因为数据在被存储在s3的磁盘上之前将被加密,并且将再次在我的服务器内存中解密.
我认为我唯一的选择是编写/购买某种ActiveX组件,它不会将图像作为简单的html图像源公开,或者将我的应用程序编写为客户端WinForm应用程序.
我必须从头开始重新实现现有系统.
有一次,当用户导航到某个网页时,服务器必须从用户的串口读取数据.
目前,该网页具有ActiveX控件; 当页面加载时,ActiveX控件调用用户PC上的COM DLL,该DLL从串行端口读取数据.
该系统已有10年历史.有没有"更好"的方式可以实现这个?
例如,技术在过去十年中不断发展.而这个解决方案似乎只适用于MS IE,它现在的市场份额约为26%(2013年,当我上次更新这个问题时.截至2107年2月,MS IE有3-4%而且Edge有由于Edge也是MS产品,它可能支持Active X - 我没有尝试过.Otoh,因为它是从头开始的新功能,很有可能它没有.)
HTML 5是否提供了任何新的可能性?Cordova等产品怎么样?
还有其他可能性吗?
我可以添加一个Raspberry Pi来通过串口读取吗?并让浏览器应用程序通过RESTful服务与之通信?
[更新] @ EuroMicelli说:"我将假设您有充分的理由从网络浏览器而不是本机应用程序运行您的应用程序".我不知道原来的项目计划时我不在身边(设计它的公司现在已经不存在了).
也许他们不希望最终用户直接与数据库连接?也许"基于浏览器"当时是一个新的流行语?我个人对桌面应用程序没有任何问题(因为我发现它们更容易实现),但是我们应该考虑保留基于浏览器的?(此外,我可以自己处理桌面应用程序;它只是从COM端口读取浏览器,导致我提供奖金;-)
我将一个WPF应用程序放在一起,允许用户通过WebBrowser控件查看PowerPoint文件,一旦文件保存为.MHT或.HTML.问题是文件包含ActiveX控件,默认情况下WebBrowser控件会在每次加载这些文件时显示警告,并说"为了保护您的安全,您的Web浏览器限制此文件显示可以访问您的活动内容电脑."
我在网上看过几个不同的地方谈论将网页标记放到每个页面,但在这种情况下,这对我来说真的不起作用,因为内容作者可以控制文件,而不是开发人员,而我不要告诉他们必须在记事本中打开每个文件,并为每个文件添加标记.
有没有办法只更改WebBrowser控件的设置不显示该警告消息?IE具有类似的设置,但它不会延续到此控件中.
我们需要使用第三方ActiveX控件.
唯一的问题是,我们软件中的图层是业务层,无法访问窗口或表单.它还运行在不是STA的单独线程上(并且应该在任何线程中工作).
我们使用此解决方法使其工作,而不是将UI与业务逻辑分开.
Thread thread = new Thread((ThreadStart)
delegate
{
_myActiveX = new MyActiveXType();
_myActiveX.CreateControl();
//more initialize work
Application.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
Run Code Online (Sandbox Code Playgroud)
然后,只要我们需要引用控件,我们调用_myActiveX.BeginInvoke()或Invoke().
在处理这个类(退出我们的应用程序)时,我们处理控件并中止线程.
我的问题是,这有什么问题吗?有没有更好的方法来处理这个?
在未知的多线程环境中有没有更好的内置方法来使用ActiveX控件?我们试图以包装控件的方式编写我们的类,但是可以在任何线程中工作.
更新:作为一个答案建议,我们真的宁愿使用标准COM对象,而根本不使用控件.我们的问题是我们会在我们调用COM对象的第一个方法或属性上得到错误"(来自HRESULT的异常:0x8000FFFF(E_UNEXPECTED)".这是一个非常一般的错误,我们在使用ActiveX时没有得到这个错误, 有任何想法吗?
更新:我们的ocx是"CX25.ocx",使用tlbimp.exe我们得到CX25Lib.dll.使用aximp.exe,我们得到AxCX25Lib.dll和CX25Lib.dll.在任何一种情况下CX25Lib.dll都不起作用.AxCX25Lib.dll可以使用.
我在VS中的工具箱中添加了一个.ocx.创建了两个.dll:Interop.NNN.dll,AxInterop.NNN.dll.
每个人是什么?它们都是必需的吗?
如何检测客户端浏览器中是否启用了ActiveX?
我试过跟随代码,但它在Firefox中不起作用.
window.ActiveXObject not working in Firefox
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
检查这里的例子:http://jsfiddle.net/qXSvQ/2/
我false在运行这个例子时得到了.
我们的网络浏览器插件在IE9和IE10中运行良好,但在IE11中,该插件既不被识别为附加组件,也不允许运行.好像IE11不再支持ActiveX.
当然有一个解决方法,但我们需要改变什么?
注意:此问题是作为插件的开发人员而不是可能需要更正IE设置的最终用户询问的!