none
请问如何在visual Studio 2017的环境下用C#开发ActiveX控件 RRS feed

  • 问题

  • 如题,小弟目前在做一个网页录音的项目,感觉需要用到ActiveX控件技术。

    我是用C#开发的,求各位大佬给个VS2017开发ActiveX控件的正常流程。

    之前我也查了相关资料,但在运行IE浏览器的时候ActiveX控件就是显示不出来,本人感到非常的困惑,也不知道哪里出错了。

    2017年11月10日 14:27

全部回复

  • 你好

    我之前用过 VS 2012-2015 的版本去开发 ActiveX,VS 2017 没有实际测试过,不过你可以按照下面的方法测试一下:

    visual studio 2012 的制作ActiveX、打包和发布

    另外,ActiveX 只能使用与 IE 及 一些 IE 内核的浏览器中,对于 Chrome、Safari 等浏览器并不适用。录音功能,应该属于浏览器可以控制权限的功能,建议使用 Html5 来实现,参考下面的文章:

    http://www.cnblogs.com/stoneniqiu/archive/2017/08/10/7341181.html


    希望我的答案能帮助更多的人。

    2017年11月12日 9:38
  • 多谢大佬的解答,现在我可以把自己开发的ActiveX控件在IE里面显示出来了。但现在出现了一个新的问题,我之前在winform下面用的C#录音类集成到ActiveX下的时候,vs2017跑不起来,提示如下:

    应用程序处于中断模式

    你的应用进入了中断状态,但无任何代码显示,因为所有线程之前都在执行外部代码(通常为系统或框架代码)。

    点击继续运行程序,就消失了,然后在主界面的输出窗口下,有这么一句信息:

    “System.Reflection.ReflectionTypeLoadException”类型的未经处理的异常在 mscorlib.dll 中发生 
    无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。

    此外,我用的录音类是用directx技术实现的,出处是百度AI论坛:

    http://ai.baidu.com/forum/topic/show/492634

    请问,这种错误应该怎么处理?是不是跟directx有关?

    2017年11月12日 10:53
  • 你好

    这个错误从信息来看,是某个运行目录里的 dll 缺失,如果不是你自己主动添加的 dll,那应该就是某个依赖的系统 dll。

    你可以试着在程序内先加一些 log,看看具体是运行到哪个方法时异常的,然后再打印详细错误信息看看。

    另外我还是觉得这种实现方式有点太重了,考虑一下用原生的 Html5 来实现吧。


    希望我的答案能帮助更多的人。

    2017年11月12日 12:10

  • 这个错误从信息来看,是某个运行目录里的 dll 缺失,如果不是你自己主动添加的 dll,那应该就是某个依赖的系统 dll。

    你可以试着在程序内先加一些 log,看看具体是运行到哪个方法时异常的,然后再打印详细错误信息看看。


    程序没能运行到有效的代码里面就消失了,我试着把录音类整个文件注释掉,这样的话程序就能正常运行,所以我怀疑还是C#录音类的问题。应该是整个程序初始化的时候,就出现了这种中断的情况。只是具体到哪行代码,我还不清楚。

    2017年11月12日 12:31
  • 这样的话,应该就是某个 dll 缺失了。

    ActiveX 和 Winform 对 dll 的默认路径识别是不一样的,记得以前做 ActiveX 时,默认路径是桌面。


    希望我的答案能帮助更多的人。

    2017年11月12日 13:10
  • 定位到是这句的问题:

    private WaveFormat mWavFormat;               // 录音的格式  

    把这句注释掉,程序就可以正常运行。

    只是定位了错误,还不知道怎么解决,因为这个变量是录音类要用到的。我尝试着改写成这样:

    private WaveFormat mWavFormat = new WaveFormat();

    程序依然会发生中断,所以还是挺困惑的。不过起码知道哪里出了问题。

    2017年11月12日 13:16
  • 看到了引用的 baidu ai 的文章里提到了 winmm.dll,因为 WaveFormat 看起来是 C++ 书写的,所以可能会有一系列的 C++ runtime 的 dll 找不到指定路径。

    你可以试着在当前目录下输入一下任意的日志文件,验证一下程序的运行目录在哪,然后把需要的 dll 都拷贝到那个目录下。


    希望我的答案能帮助更多的人。

    2017年11月12日 13:28
  • 看到了引用的 baidu ai 的文章里提到了 winmm.dll,因为 WaveFormat 看起来是 C++ 书写的,所以可能会有一系列的 C++ runtime 的 dll 找不到指定路径。

    你可以试着在当前目录下输入一下任意的日志文件,验证一下程序的运行目录在哪,然后把需要的 dll 都拷贝到那个目录下。


    希望我的答案能帮助更多的人。

    微软说我的用户需要验证才能发图,所以我没有把截图发过来了。当前运行的目录是"项目名\bin\debug"目录下,此目录中已经引用了directxsound.dll。

    请顺路告诉我一下验证的方法,才方便发截图。

    2017年11月12日 13:44
  • 你好

    我也没有验证用户的权限,应该是msdn后台审核会有延迟吧。

    除了 directxsound.dll,还有没有其他的 C++的 dll 依赖呢,如果有的话,也需要拷贝到运行目录。


    希望我的答案能帮助更多的人。

    2017年11月12日 13:54
  • 你好

    我也没有验证用户的权限,应该是msdn后台审核会有延迟吧。

    除了 directxsound.dll,还有没有其他的 C++的 dll 依赖呢,如果有的话,也需要拷贝到运行目录。


    希望我的答案能帮助更多的人。

    其他的好像就只有directx.dll

    另外,这个C#录音类一模一样的代码可以在wpf或者winform下正常运行,winform里面也会发生中断,但不影响程序功能。可以正常录音。

    2017年11月12日 13:58
  • 另外一些有可能的原因:

    看看 x64 和 x86 的编译设置在 activex 和 winform 时是否一致

    如果 winform 也会发生中断,那可能是类本身就有问题,只是 activex 和 winform 处理的方式不同


    希望我的答案能帮助更多的人。

    2017年11月12日 14:04
  • 另外一些有可能的原因:

    看看 x64 和 x86 的编译设置在 activex 和 winform 时是否一致

    如果 winform 也会发生中断,那可能是类本身就有问题,只是 activex 和 winform 处理的方式不同


    希望我的答案能帮助更多的人。

    winform会中断,不过在项目目录下增加一个app.config配置文件就可以正常运行。这个配置文件的内容类似如下:

    修改App.config文件。
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true"> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
        </startup>
    </configuration>

    然后,winform就能跑了,但同样的招数似乎在ActiveX项目里面无效了,真是太坑了。

    2017年11月12日 14:23
  • 看一下 activex 的 .net framework 版本是多少,改成 4.0 试试看

    希望我的答案能帮助更多的人。

    2017年11月12日 14:27
  • 改成4.0好像也没什么作用,directsound开发真是难搞,可能directsound是用C++写的,然后集成到C# ActiveX项目就出问题了哎。
    2017年11月13日 6:09
  • 你好,

    从你的错误信息来看,我觉得你就是在环境中缺少了引用,但是具体缺少什么引用看不出来。

    另外,现在activeX的使用人数越来越少了, 你可以考虑使用前端开发开实现这个录音。

    比如如下的:

    https://gist.github.com/jerrybendy/4edb552f8414dd86e3989e9315a81adc


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年11月21日 6:48
  • 你好,请问问题解决了吗,我也碰到过一样的问题
    2019年6月11日 7:06