西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发C#.NET → Visual Studio中.Net 引用C++的DLL报错解决方案

Visual Studio中.Net 引用C++的DLL报错解决方案

相关软件相关文章发表评论 来源:西西整理时间:2013/4/4 20:51:39字体大小:A-A+

作者:西西点击:0次评论:1次标签: DLL

  • 类型:DLL和OCX大小:8.6M语言:中文 评分:2.5
  • 标签:
立即下载

.Net 开发中如果使用外部DLL,一般引用进来就可以了,最多引用前将DLL注册一下。下面是我所遇到的问题及解决的方法,希望能对大家有用。

1.在Visual Studio中引用C++写的DLL时报以下错误

未能添加引用,请确保此文件可访问并且是一个有效的程序集或COM组件。

手工注册该DLL也报错:模块已加载,但找不到入口点DLLRegisterServer, 请确保XXX为有效的DLL或OCA文件,然后重试。

经查询发现C++编译的DLL并不一定能被C#直接使用,需通过C#中的DllImport直接调用这些功能。

代码如下所示:

在程序开始时使用以下语句注册方法。

[DllImport("Enc7481.dll", EntryPoint = "_Enc7481_Set_Encoder", ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
 private extern static void _Enc7481_Set_Encoder(UInt16 intDirection, Int32 lngValue);

在程序中直接调用就可以了:

_Enc7481_Set_Encoder(0, 0);

2.找不到对应的方法

使用以上的程序后,参考厂商所给的C++程序却报找不到对应的入口点,也就是函数名称不对。C++DLL编译后函数名称会有变化,需使用eXeScope.exe查询具体的函数名称。

3.报内存错误:

尝试读取或写入受保护的内存。这通常指示其他内存已损坏。造成这种错误的情况很多,一般来说是对函数的使用错误造成的。对于我的程序来说是因为需要首先调用_Enc7481_Init()来初始化。

4.类型错误

终于将以上错误都解决,程序可以运行了,但发现取到的数据总是不对,再次检查,发现原来是数据类型不对造成的。

VC++中主要字符串类型为:LPSTR,LPCSTR, LPCTSTR, string, CString, LPCWSTR, LPWSTR等
但转为C#类型却不完全相同,只有数据类型对应正确才能取得正确的数据。

类型对照:

BSTR ---------  StringBuilder

LPCTSTR --------- StringBuilder

LPCWSTR ---------  IntPtr

handle---------IntPtr

hwnd-----------IntPtr

char *----------string

int * -----------ref int

int &-----------ref int

void *----------IntPtr

unsigned char *-----ref byte

5.结构体参数的传递

对于结构体参数需要在C#中建立对应的结构体,并用Marshal类将结构体转换为指针地址传给C++函数,取得数据后再根据指针地址取得对应的结构。

HREE structThree = new THREE();
            IntPtr ptrThree = Marshal.AllocHGlobal(Marshal.SizeOf(structThree));
            Marshal.StructureToPtr(structThree, ptrThree, false);
            _Enc7481_Get_ThreeEncoder2(ptrThree);
            structThree = (THREE)Marshal.PtrToStructure(ptrThree, typeof(THREE));

    dll文件
    (300)dll文件
    小编为您整理了文件合集下载和文件修复工具下载大全,方便解决您日常出现的一些问题。简介的全称是,中文叫做动态链接文件。在操作系统中,对于程序执行是非常重要的,因为程序在执行的时候,必须链接到文件,才能够正确地运行。而有些文件可以被许多程序共用。因此,程序设计人员可以利用文件,使程序不至于太过巨大。但是当安装的程序越来越多,文件也就会越来越多,如果当你删除程序的时候,没有用的文件没有被删除的话,久而久之就造成系统...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(1)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)