关于C#调用C库文件出现的错误,新手真诚请求指点

问题描述

我在调用C的一个lib文件时,要用到里面的一个函数。函数原型是longWriteMemTbl(CONSTCHAR*filename,CONSTLONGRecordNo,CONSTvoid*buffer,CONSTLONGsize,CONSTLONGBlockTime);我所做程序如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;namespace中间件写共享区{classProgram{[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]structrm_vsb_set{[MarshalAs(UnmanagedType.SysUInt,SizeConst=12)]publicintDescaPattern;[MarshalAs(UnmanagedType.R8,SizeConst=12)]publicfloatEdgerGap;[MarshalAs(UnmanagedType.R8,SizeConst=12)]publicfloatSideGuide;[MarshalAs(UnmanagedType.R8,SizeConst=12)]publicfloatEdgerDraft;[MarshalAs(UnmanagedType.R8,SizeConst=12)]publicfloatBarLength;}[DllImport("RDMAPI.dll",CharSet=CharSet.Ansi,SetLastError=true)]staticexternunsafelongWriteMemTbl([MarshalAs(UnmanagedType.LPStr)]stringfilename,longRecordNo,[MarshalAs(UnmanagedType.LPStruct)]refrm_vsb_setbuffer,longsize,longBlockTime);staticvoidMain(string[]args){rm_vsb_set_RmVsbSets=newrm_vsb_set();_RmVsbSets.DescaPattern=2222;_RmVsbSets.EdgerGap=10;_RmVsbSets.SideGuide=10;_RmVsbSets.EdgerDraft=10;_RmVsbSets.BarLength=400;longrecordNo=10,retc=WriteMemTbl("RmVsbSet",recordNo,ref_RmVsbSets,System.Runtime.InteropServices.Marshal.SizeOf(_RmVsbSets),100);if(retc>0){Console.WriteLine("OK!n"+retc);}}}}

报的错误如下:未处理异常:SYSTEM.ARGUMENTEXCEPTION:类型“中间件共享区.rm_vsb_set”不能作为非托管结构进行封送处理,无法计算有意义的大小或偏移量。我是C#新手,烦请各位帮指点一下。

解决方案

解决方案二:
该回复于2008-04-10 14:54:47被版主删除
解决方案三:
这个,我还是没有找到,麻烦指点一下:)

时间: 2024-10-07 22:00:04

关于C#调用C库文件出现的错误,新手真诚请求指点的相关文章

Android NDK调用第三方库文件及找不到第三方库解决方案

如何在Android NDK中调用第三方库文件(.so) 1.在project/jni目录下创建prebuilt子目录(目录名可自定义). 2.将第三方.so放到prebuilt中,并创建Android.mk, 内容如下:     LOCAL_PATH := $(call my-dir)     include $(CLEAR_VARS)     LOCAL_MODULE := xxx     LOCAL_SRC_FILES := libxxx.so     include $(PREBUILT

mfc求助-MFC调用外部exe文件,显示错误,大家帮研究下,急用,谢谢

问题描述 MFC调用外部exe文件,显示错误,大家帮研究下,急用,谢谢 外部exe单独运行正常,但是一用mfc调用,就显示为外部exe文件内的一个idx文件初始化失败,大家帮看下,求解决,急用,谢谢大家啦, 解决方案 报什么错误,用shellexecute执行,指定下程序的工作路径看看. 解决方案二: 用绝对路径执行启动exe试试

vs2010 boost库 c2039-vs2010在调用boost库时出现以下错误 c2039

问题描述 vs2010在调用boost库时出现以下错误 c2039 f:项目参考资料steganalysis2_spamspam_windowssrcspam.cpp(177): error C2039: "leaf": 不是"boost::filesystem::directory_entry"的成员 1> f:softwarevs2010相关库oost_1_58_0oostfilesystemoperations.hpp(684) : 参见"bo

python-Python中如何调用第三方库的问题

问题描述 Python中如何调用第三方库的问题 各位大神,晚辈想问一个问题,请大神帮忙.问题:在使用Python2.7 的时候,如何去调用第三方的库.还有就是Python(x,y)与Python2.7 的主要区别是什么?如果安装的是Python(x,y),是不是就不会引起调用第三方库的问题?请各位大神指点,谢谢! 解决方案 首先没用过python(x,y),其次要调用第三方库,你首先要安装(可以用pip或者easyinstall),安装之后,看第三方库的文档,就可以调用了. 解决方案二: PyT

atl com c++ ocx-c++调用自己编写的ocx库文件失败原因

问题描述 c++调用自己编写的ocx库文件失败原因 #include #include #include "../last/LAST.h" #include "../last/LAST_i.c" void main(void) { // 声明一个HRESULT变量以及一个Simple_ATL接口的指针 IMyClass *IMyClass = NULL; HRESULT hr = CoInitialize(NULL); // 初始化COM // 现在初始化COM h

c++-VC2013动态库可以调用静态库(.lib)文件吗

问题描述 VC2013动态库可以调用静态库(.lib)文件吗 我创建了一个c++静态库(比如a.lib),然后想引用到另一个项目b中去,这个项目如果设置同样生成静态库,就正常编译后生成b.lib,但是我需要的是动态库(b.dll),然而当我将属性页配置类型改为动态库再编译时提示"error LNK1104:无法打开文件a.lib".难道动态库不能引用静态库文件吗? 解决方案 可以直接引用lib文件,先看你的a.lib路径在工程中是否配置好了 解决方案二: 绝对是可以引用的,找工程配置或

c# c++ dll-C#调用C++和opencv生成的dll库文件,其中函数中带有指针

问题描述 C#调用C++和opencv生成的dll库文件,其中函数中带有指针 大家好,我用C#调用C++的dll,其中一个函数中有指针,参数的定义在C++中是一个结构体,但是我现在遇到的问题是无法获取托管类型的地址和大小,或无法声明指向它的指针,下面我把这个函数在C++中的定义和我自己转到C#中的定义给大家贴出来,大家帮帮忙,本人属于C++和C#新手. C++ 1. int THFI_Create (short nChannelNum,THFI_Param* pParam) 功能:初始化THFa

异常-c# 程序调用外部dll文件对采集模块进行读写,不定时出现以下错误

问题描述 c# 程序调用外部dll文件对采集模块进行读写,不定时出现以下错误 问题签名: 问题事件名称: BEX 应用程序名: NangGang11.20.vshost.exe 应用程序版本: 9.0.21022.8 应用程序时间戳: 47316898 故障模块名称: MSVCR80.dll 故障模块版本: 8.0.50727.6195 故障模块时间戳: 4dcddbf3 异常偏移: 00008aa0 异常代码: c000000d 异常数据: 00000000 解决方案 光给出一个异常信息,天知

自制的一个操作sqlite数据库的库文件

 自制的一个操作sqlite数据库的库文件,写时用的IDE是KDevelop3.3.4. 头文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #ifndef _SQLITE3LIB_H_ #define _SQLITE3LIB_H_   #include <stdio.h> #include <stdlib.h> #include<sqlite3.