c#调用c++ api函数之参数类型问题-急(高人教教我)

问题描述

c#调用c++api函数之参数类型问题c++函数定义如下extern"C"{structcolorstruct{doubledbValueInterval;CStringstr;IColorPtripColor;colorstruct(){str=_T("");dbValueInterval=0.0;ipColor.CreateInstance(CLSID_RgbColor);}};__declspec(dllexport)voidCressmantestforSK(inta,intirad,float*rads,intisiz,intjsiz,floatdbCellSize,doublelnmin,doublelnmax,doubleltmin,doubleltmax,longstnnum,float*stnlon,float*stnlat,float*stnrpt,float*grid,colorstruct*colorArray,intiLineNum,floatNoDefineVale);}C#中extern如下[DllImport("CressmanforSk24.dll")]publicexternstaticvoidCressmantestforSK(//__declspec(dllexport)voidCressmantestforSK(inta,//inta,intirad,//intirad,Single[]rads,//Single*rads,intisiz,//intisiz,intjsiz,//intjsiz,SingledbCellSize,//SingledbCellSize,doublelnmin,//doublelnmin,doublelnmax,//doublelnmax,doubleltmin,//doubleltmin,doubleltmax,//doubleltmax,longstnnum,//longstnnum,Single[]stnlon,//Single*stnlon,Single[]stnlat,//Single*stnlat,Single[]stnrpt,//Single*stnrpt,outSingle[]grid,//Single*grid,colorstruct[]colorArray,//colorstruct*colorArray,intiLineNum,//intiLineNum,SingleNoDefineVale//SingleNoDefineVale);//);publicstructcolorstruct{///<summary>///数值///</summary>[MarshalAs(UnmanagedType.R8)]publicdoubledbValueInterval;//=0;///<summary>///名称///</summary>[MarshalAs(UnmanagedType.LPStr)]publicstringstr;//=""///<summary>///颜色///</summary>[MarshalAs(UnmanagedType.Interface)]publicIColoripColor;//=newRgbColorClass()//voidcolorstruct()//{//str=_T("");//dbValueInterval=0.0;//ipColor.CreateInstance(CLSID_RgbColor);//}};报错:尝试读取或写入受保护的内存,内存已损坏初步确定是参数类型对应的问题,谁能帮帮我啊msn:jpu_jacky@eyou.com

解决方案

解决方案二:
[StructLayout(LayoutKind.Sequential)]publicstructcolorstruct{...}

解决方案三:
有精通的朋友加我msn,做arcgis二次开发的更好,先谢谢大家了
解决方案四:
up
解决方案五:
帮顶
解决方案六:
两星都只能帮顶啊?谁精通的给我们菜鸟上一课吧~
解决方案七:
那有个CString啊
解决方案八:
估计是这样voidCressmantestforSK(inta,intirad,reffloatrads,intisiz,intjsiz,floatdbCellSize,doublelnmin,doublelnmax,doubleltmin,doubleltmax,longstnnum,reffloatstnlon,reffloatstnlat,reffloatstnrpt,reffloatgrid,IntPtrcolorArray,intiLineNum,floatNoDefineVale);

colorArray参数通过Marshal.UnsafeAddrOfPinnedArrayElement();

得到初始地址
解决方案九:
考虑一下是否是字节边界对齐问题.尝试一下调整Layout的对齐大小
解决方案十:
不好翻译的类型(指针)先用IntPtr代替,先把接口调试通过再想办法structcolorstruct{publicdoubledbValueInterval;publicIntPtrstr;publicIntPtripColor;}

解决方案十一:
我要上笨办法了一个个类型来调等我搞明白了告诉大家
解决方案十二:
帮顶

时间: 2024-08-26 10:33:36

c#调用c++ api函数之参数类型问题-急(高人教教我)的相关文章

vc-VC里怎样实现向另一应用程序发送命令行参数?需要调用哪些API函数?

问题描述 VC里怎样实现向另一应用程序发送命令行参数?需要调用哪些API函数? 现要写一个程序甲,甲向乙程序发送命令行参数,乙解析该参数并作相应操作, 现在问题是具体甲怎样向乙发送命令行参数?需要调用哪些API函数? (抱歉还是菜鸟,没有金币悬赏~谢谢各位大神了!) 解决方案 如果a是启动进程B的话,那么CreateProcess就可以启动B,同时带上命令行参数,B解析参数进行动作. 如果B已经启动了,这个其实就是进程通信,最简单的方式是发送消息,PostMessage.B根据消息进行对应的操作

用Visual C#调用Windows API函数(转)

visual|window|函数 用Visual C#调用Windows API函数 北京机械工业学院研00级(100085)冉林仓       Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用WindowsAPI函数的接口, 也就是说具备调用动态连接库的能力.Visual C#和其它开发工具一样也能够调用动态链接库的API函数..NET框架本身提供了这样一种

c#调用Win32 Api函数

在c#中可以通过互操作性服务using System.Runtime.InteropServices来调用window api函数.并且通过属性来指定api函数的位置,以及调用方式,比如,我们要调用User32.dll里的函数MessageBox(HWnd hwnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT type) 首先引入名字空间 using System.Runtime.InteropServices; 其次定义一个静态方法,并且指定调用的方式.其中用关

mfc-MFC怎么操作win7的新东西,调用哪些API函数

问题描述 MFC怎么操作win7的新东西,调用哪些API函数 http://www.oschina.net/question/2301545_249595 由于上传图片总失败,我直接转载开源中国的帖,大神帮我看看 解决方案 你说的是jump list和aero peekhttp://www.codeproject.com/Articles/103913/How-to-Create-a-Custom-Jumplist-with-Custom-Events 这是aero peekhttp://sta

VBS调用Windows API函数的代码_vbs

那天无意中搜索到一篇<WinCC VBS利用EXCEL调用Windows API函数>的文章,不知道WinCC是什么,Google了一下好像跟西门子自动化有关.WinCC是什么并不重要,重要的是这篇文章提供了VBS调用Windows API的一种思路--EXCEL VBA,一种传说比VB还要VB的语言. 但是那篇文章中的例子都是使用已经写好的EXCEL VBA程序,即首先得存在一个EXCEL文件.我就想,能不能在VBS中通过excel.application对象创建一个包含VBA代码的EXCE

用Visual C#调用Windows API函数

visual|window|函数 Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用WindowsAPI函数的接口, 也就是说具备调用动态连接库的能力.Visual C#和其它开发工具一样也能够调用动态链接库的API函数..NET框架本身提供了这样一种服务,允许受管辖的代码调用动态链接库中实现的非受管辖函数,包括操作系统提供的Windows API函数.它能够定

用c#开发wince调用windows api函数的问题?

问题描述 WINCE平台下可以调用WINDOWSAPI函数吗?usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Runtime.InteropServices;namespaceWindowsApplication_haha

api-C#如何调用API函数编写64的程序,求指导

问题描述 C#如何调用API函数编写64的程序,求指导 会用C#调用win32API函数,但是编写的程序只能在32位系统上运行,现在想调用API函数编写64位的程序,怎么实现呢,求思路. 解决方案 一样的,windows会用wow的 解决方案二: C#中调用一些API函数

在Visual C#中运用API函数获取系统信息

visual|函数 API函数是构筑Windows应用程序的基石,是Windows编程的必备利器.每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法,或者是调用Windows API函数的接口,也就是说具备调用动态连接库的能力.Visual C#和其它开发工具一样也能够调用动态链接库的API函数.本文中笔者就结合实例向大家介绍在Visual C#中如何调用各种返回值的API,该实例就是一个通过API函数调用获取系统信息的程序. 在Visual C#中调用