none
编译错误:【Ivi::Visa::Interop】命名空间不存在??? RRS feed

  • 问题

  • 背景介绍:编写测试程序,借助于 Agilent 82530B(数据采集卡)与 Agilent 34401A(数字万用表)通信,从而实现大流量数据的采集。

                   根据Agilent公司提供的PDF,需要先引入COM项目【VISA COM 3.0 Type Library】才可使用。              

    使用编程语言:C++/CLI

    程序类型:CLR(Windows 窗体应用程序)

    开发环境:VS2010简体中文旗舰版

    .net 库版本:.net Framework 4.0

    我做过哪些(错误详述):

                      1、安装Agilent 82530B IO Library(即82530B驱动);

                      2、新建CLR(Windows 窗体应用程序),引入COM项目【VISA COM 3.0 Type Library】,成功(可在类视图查看到期内容);

                      3、在Form1类的引入命名空间的地方引入该命名空间,编译出错,提示编译错误:C2871,找不到命名空间; 

                      4、使用VS2010运行Agilent公司提供的示例程序,编程语言:C#, 运行成功,编译器不报告任何错误。

                      对比二者引入的内容,都是一样的。

                      在C#中使用【using Ivi.Visa.Interop】,在C++/CLI中使用【using namespace Ivi::Visa::Interop;】(这一点不会错,Agilent提供的PDF里有特别的说明并给出了代码示例)。

                     

                    

    2012年3月12日 13:52

答案

  • 在C++\CLI程序中使用COM的话,要在头文件中添加#using语句的。 

    一般来说添加的COM组件在程序中会创建一个Interop的文件夹,添加的引用DLL都在这个文件夹下。然后在使用的时候记的添加预编译语句 #using "./Interop/ dll name"。

    你可以尝试一下。不行的话,我们在讨论一下。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年3月13日 5:45
    版主
  • 在C#或者CLI中,使用命名空间的时候应该使用这个名字: VisaComLib。

    试着改一下CLI的using namespace 语句: 

    using namespace VisaComLib;

    由于我本地上没有那个COM的注册,我只能改到编译器不会报出命名空间不存在的错,其他的测试要注册这个DLL到本地才可以。我也相信只要这个错误解决掉以后,您接下来的工作会相当的容易。 

    同时呢,如果是那个COM组件的使用问题,我建议您直接咨询相对应的公司来解决。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年3月14日 7:22
    版主
  • 在C# 中,添加COM引用时,在VS中显示的是什么名字? 如果显示的是Ivi.Visa.Interop,那你CLI中就可以用这个名字,要不就直接要用VS中的references的直接名字。 在CLI中使用的时候在指定命名空间和类名。

    另外,我下载了一个相关的列子,已经发到您的油箱,请查收。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 qingfy2007 2012年3月15日 13:53
    2012年3月13日 7:29
    版主
  • 奇怪,要不你把那个COM组件发给我,我添加一下试试看。

    rocky_msn@hotmail.com

    谢谢先。    


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 qingfy2007 2012年3月15日 13:52
    2012年3月14日 5:53
    版主
  • 很高兴能帮得到您。也十分的高兴您的项目能成功运行。。

    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 qingfy2007 2012年3月15日 13:50
    • 取消答案标记 qingfy2007 2012年3月15日 13:51
    • 已标记为答案 qingfy2007 2012年3月15日 13:52
    2012年3月15日 1:40
    版主

全部回复

  • 后来我进行过两次尝试:

    尝试一:

               在Form1类中引入的命名空间后再引入“Ivi::Visa::Interop”,即使用以下代码:   

    #pragma once

    namespace GPIB
    {
     using namespace System;
     using namespace System::ComponentModel;
     using namespace System::Collections;
     using namespace System::Windows::Forms;
     using namespace System::Data;
     using namespace System::Drawing;

     using namespace using namespace Ivi::Visa::Interop;          // 仅仅加这一句代码

    编译错误:错误内容同上

    尝试内容二:新建头文件,再在该头文件中引入该命名空间,即使用以下代码:

    #pragma once

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    using namespace Ivi::Visa::Interop;

    编译错误:错误内容同上

    问:这是什么原因?如何解决?

          急,不胜感激!!!

    2012年3月12日 14:00
  • 尝试一中有一句代码贴错了:是“using namespace Ivi::Visa::Interop;”

                                           不是“using namespace using namespace Ivi::Visa::Interop; ”

    82530B 是PCI GPIB数据采集卡,采用GPIB的连接方式与34401A(数字万用表)相连。

    2012年3月13日 0:53
  • 在C++\CLI程序中使用COM的话,要在头文件中添加#using语句的。 

    一般来说添加的COM组件在程序中会创建一个Interop的文件夹,添加的引用DLL都在这个文件夹下。然后在使用的时候记的添加预编译语句 #using "./Interop/ dll name"。

    你可以尝试一下。不行的话,我们在讨论一下。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年3月13日 5:45
    版主
  • 在我的解决方案中,确实含有Interop的文件夹,并且其内含有所需的DLL文件。我在【类视图】的引用里面还可以看到【Ivi::Visa::Interop】命名空间中得内容,但是在代码部分,【using namespace Ivi::Visa::Interop;】的颜色是黑色的(其他引入的命名空间是蓝色的,说明确实没有引入成功)。

    我想代码修成如下(其余位置代码均自动生成):

    #pragma once

    #using "./Interop/Interop.VisaComLib.3.0.dll"
    //#using <Interop.VisaComLib.3.0.dll>

    namespace GPIB {
     using namespace System;
     using namespace System::ComponentModel;
     using namespace System::Collections;
     using namespace System::Windows::Forms;
     using namespace System::Data;
     using namespace System::Drawing;

     using namespace Ivi::Visa::Interop;

    ……

    编译仍然出现以上错误。

    2012年3月13日 7:17
  • 如果您有【C++/CLI】引用COM的程序源码,方便的话请发一份到我的邮箱:qingfy2007@hotmail.com 中。

    谢谢先。

    2012年3月13日 7:21
  • 在C# 中,添加COM引用时,在VS中显示的是什么名字? 如果显示的是Ivi.Visa.Interop,那你CLI中就可以用这个名字,要不就直接要用VS中的references的直接名字。 在CLI中使用的时候在指定命名空间和类名。

    另外,我下载了一个相关的列子,已经发到您的油箱,请查收。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 qingfy2007 2012年3月15日 13:53
    2012年3月13日 7:29
    版主
  • 您好,首先真诚的感谢你对我问题的热情答复。

    【昨天是因为流量用完了(公司限制流量),所以未能及时回复,敬请谅解)。

    这个是 Agilent 给出的日文版的资料里的截图,所以我说那么引用没有错。

    下面是 Agilent 给出的 【C#】的示例代码的命名空间引用方式:

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using Ivi.Visa.Interop;


    namespace WindowsApplication1
    {

    2012年3月14日 0:57
  • 您的邮件我已经收到
    2012年3月14日 0:58
  • 能给个VS中引用那一项的截图吗?

    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年3月14日 2:44
    版主
  •                                                                                                      项目右键“引用”,引入COM项目

                                                                              确认项目已经被引用

    2012年3月14日 3:33
  •          

    类视图中查看引入项目的内容

    2012年3月14日 3:35
  • VVX 可以提示命名空间的书写

    2012年3月14日 3:37
  • 添加两句代码,其他均自动生成,编译出错

    2012年3月14日 3:38
  • 奇怪,要不你把那个COM组件发给我,我添加一下试试看。

    rocky_msn@hotmail.com

    谢谢先。    


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 qingfy2007 2012年3月15日 13:52
    2012年3月14日 5:53
    版主
  • 好的,我马上发给你。

    我用VB6.0 引入该组件可以正常使用。

    2012年3月14日 6:23
  • 在C#或者CLI中,使用命名空间的时候应该使用这个名字: VisaComLib。

    试着改一下CLI的using namespace 语句: 

    using namespace VisaComLib;

    由于我本地上没有那个COM的注册,我只能改到编译器不会报出命名空间不存在的错,其他的测试要注册这个DLL到本地才可以。我也相信只要这个错误解决掉以后,您接下来的工作会相当的容易。 

    同时呢,如果是那个COM组件的使用问题,我建议您直接咨询相对应的公司来解决。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年3月14日 7:22
    版主
  • 您好,挚诚感谢您的热情回答。

    将【using namespace Ivi::Visa::Interop】改成【using namespace VisaComLib】编译无误,运行成功。

    您帮我解决了大问题。

    微软的soft engineer  就是牛。

    2012年3月15日 1:05
  • 很高兴能帮得到您。也十分的高兴您的项目能成功运行。。

    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 qingfy2007 2012年3月15日 13:50
    • 取消答案标记 qingfy2007 2012年3月15日 13:51
    • 已标记为答案 qingfy2007 2012年3月15日 13:52
    2012年3月15日 1:40
    版主