一只大蘑菇
2018-01-01 03:53C#调用C程序dll的内存问题
10项目需要:实现C#调用C语言写的的算法,该C程序需要封装成dll。C程序本身可以跑通没有任何问题,随即写了一个C#demo来调用该算法。报如下图的错误
由于测试阶段,所以该C程序没有参数接口,所以排除网上一些帖子说的参数类型不匹配的原因。
进入dll内部进行调试,报如下错误
经调试发现是第二块内存continental_47_grid分配失败导致的上图错误,第一块aodgrid分配正常。
但如果手动把分配内存大小调小可以分配成功。如此看来是内存空间不够的问题导致的,但是C程序本身运行没有出现过这样的问题。难道是dll本事有内存限制机制?
卡了很多天了,还望各路大神帮忙看看
一下是C#调用代码:
public static class NativeMethod
{
[DllImport("kernel32.dll", EntryPoint = "LoadLibrary")]
public static extern int LoadLibrary(
[MarshalAs(UnmanagedType.LPStr)] string lpLibFileName);
[DllImport("kernel32.dll", EntryPoint = "GetProcAddress")]
public static extern IntPtr GetProcAddress(int hModule,
[MarshalAs(UnmanagedType.LPStr)] string lpProcName);
[DllImport("kernel32.dll", EntryPoint = "FreeLibrary")]
public static extern bool FreeLibrary(int hModule);
}
static int Main(string[] args)
{
int hModule = NativeMethod.LoadLibrary("AHI_AOD_noarg.dll");
if (hModule == 0)
return 1;
IntPtr intPtr = NativeMethod.GetProcAddress(hModule, "AHI");
AHI AHI = (AHI)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(AHI));
AHI();
return 0;
}
}
}
- 点赞
- 回答
- 收藏
- 复制链接分享
5条回答
为你推荐
- C#调用C++写的DLL类库 结构类型的数据如何传参 和 接收返回
- c++
- c#
- 4个回答
- c# 写的一个dll给vb调用,却注册不了。
- c#
- visual studio
- 1个回答
- C#DLL如何调用C#主程序的回调函数?
- c#
- 2个回答
- C#调用C++的dll,C++程序中给结构体中变量赋值this指针,对应C#中应该怎么写呢?
- c++
- 指针
- c#
- this指针
- 结构
- 4个回答
- c++调用c#的dll,using 命名空间报错的问题
- dll
- c++
- c#
- 1个回答
换一换