加为好友
发送私信
在线聊天
lotus_dr
等级:
可用分等级:短工
总技术分:0
总技术分排名:321453
结帖率:66.67%
发表于:2008-08-21 17:19:25 楼主
vc++的dll函数原型如下,有三个: extern "C" _declspec(dllexport) int solution (char* roverfile,int iRoverModel, TOutputPt** vRes, bool bStatic=true); //设置基准站信息 extern "C" _declspec(dllexport) void SetBaseInfo( char * strBaseFile,/*基准站绝对路径*/ double B, double L, double H /*基准站BLH坐标*/ ); extern "C" _declspec(dllexport) void DestroyOutputPt (TOutputPt** vRes); 我在.net里面调用改成了这样的: C# code
[DllImport( " USolution.dll " )] // dll在磁盘中的存放位置
public static extern int [color = #FF0000]solution[ / color]( string roverfile, int iRoverModel, ref IntPtr vRes, bool bStatic);
[DllImport( " USolution.dll " )] // dll在磁盘中的存放位置
// [DllImport(@"F:\“调查之星”后差分相关资料和说明\“调查之星”后差分相关资料和说明\USolution\Release\USolution.dll")] // dll在磁盘中的存放位置
public static extern void SetBaseInfo( string strBaseFile, double B, double L, double H);
[DllImport( " USolution.dll " )]
public static extern void DestroyOutputPt(IntPtr vRes);
调用部分(主要是solution这个函数) C# code
// 解算
int iEpoches = - 1 ;
IntPtr vRes = new IntPtr(Marshal.SizeOf( typeof (TOutputPt)));
iEpoches = solution(roverfile, 0 , ref vRes, true );
if (iEpoches >= 0 )
{
// 解算成功,将解算结果写入输出文件
TOutputPt[] pts = new TOutputPt[iEpoches];
IntPtr pt = vRes;
for ( int i = 0 ; i < iEpoches; i ++ )
{
pts[i] = (TOutputPt)Marshal.PtrToStructure(pt, typeof (TOutputPt));
pt = (IntPtr)(( int )pt + Marshal.SizeOf( typeof (TOutputPt)));
}
InputToFile(pts,outfile);
DestroyOutputPt(vRes);
运行结果: 在debug下面是对的,iEpoches 为一个正数,TOutputPt的vRes也有值 但是在release下面,iEpoches为一个负数,这个负数在dll里面表示说“内存不足” 这个错误搞了两天了,试了很多方法,但是仍然没有找到解决办法,望各位高手不宁赐教啊~小女子感激不尽!!
问题点数: 60 回复次数:17
显示所有回复 显示星级回复 显示楼主回复
修改
删除
举报
引用
回复