C#调用C编写的dll需要注意的几个问题

1.C语言编写dll

参考链接http://blog.csdn.net/qq759981398/article/details/8007791

2.调用dll返回值的类型

一般情况下无返回值或者返回int类型,当需要返回字符串时候,并且调用函数的参数也是字符串,通过以下方法实现:

char   buff[50];    
char   buff_single[5];  

char* __stdcall ReturnString(char* pFile)
{
    char   addre[100]; 
    strcpy(addre,pFile);//字符串参数
    strcat(buff,buff_single);//追加字符
    return buff;
}
[DllImport("D:\\PicRec.dll", EntryPoint = "ReturnString", CharSet = CharSet.None)]
public static extern IntPtr ReturnString(string str);
        public string Main(String inputStr)
        {
            string str= "";
            Bitmap bmp = new Bitmap(inputStr);//读取图片
            bmp.Save("D:\\test.bmp", ImageFormat.Bmp);//转存

            IntPtr intPtr = new IntPtr();
            intPtr = ReturnString(inputStr);//调用dll函数,识别结果

            str1 = Marshal.PtrToStringAnsi(intPtr);
            return str;
         }

3.C编写dll指针释放问题。

二级指针的释放:

int **a;//二维数组
a=(int**)malloc(n*sizeof(int*));  
for(i=0;i<n;i++)
       a[i]=(int*)malloc(m*sizeof(int));
for(i=0; i<n; i++)
    {  
        free(a[i]);  
    }  
free(a);

当调用函数返回值是指针的时候,那么最后指针是如何释放的?(关于内存泄露,我也还不太明白)

为了避免这个问题,我采用的是将结果写入txt文件中,再让C#去文件中读取。

 

posted @ 2013-09-23 11:55  啊仁  阅读(749)  评论(0编辑  收藏  举报