oqqsail
一只大蘑菇
采纳率0%
2018-01-01 03:53 浏览 1.6k

C#调用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条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-01-01 03:58

    这个很难说,c程序本身比较简陋,像数组越界之类的,就是发生了,也不会报错。c能运行不等于程序没有问题。

    点赞 2 评论 复制链接分享
  • hdt 真相重于对错 2018-01-01 04:53

    malloc 之后,你不做判断吗?
    类似
    float* value = malloc(sizeof(float)*10);
    if(value==NULL)
    {
    int errno = getlasterror();
    }

    点赞 1 评论 复制链接分享
  • weixin_40933866 入云龙9342 2018-01-01 12:55

    float* value = malloc(sizeof(float)*10);
    if(value==NULL)
    {
    int errno = getlasterror();

    点赞 评论 复制链接分享
  • ddu_163 ddu_163 2018-01-01 13:18

    你的size_band的值是多大?32位还是64位程序?小心不要超过系统允许的最大值

    点赞 评论 复制链接分享
  • JohnedJay JohnedJay 2018-01-02 14:17

    malloc 之后,你不做判断吗?
    类似
    float* value = malloc(sizeof(float)*10);
    if(value==NULL)
    {
    int errno = getlasterror();
    }

    点赞 评论 复制链接分享

相关推荐