读书人

C#调用dll中的一个c写的访问文件的函数

发布时间: 2012-12-27 10:17:09 作者: rapoo

C#调用dll中的一个c写的访问文件的函数,出现Accessviolationexception异常
这是c代码


typedef struct ProClass
{
char* ProClassName;//产品类型
char* ProClassRegDate;//产品类型添加时间
ProClass* next;
}ProClass,*ProClassLink;

//添加产品类
void AddProClass(ProClass proclass)
{
FILE* fp;
fp=fopen("ProClass.txt","ab");
fprintf(fp,"%s %s",proclass.ProClassName,proclass.ProClassRegDate);
fclose(fp);
}





这是c#代码


[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct ProClass
{
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)]
public string ProClassName;
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)]
public string ProClassRegDate;
public System.IntPtr next;
}

[DllImport("linklist.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
private extern static void AddProduct(LinkList product);


public static void AddProClass(string ProClassName)
{

ProClass proclass = new ProClass();
proclass.ProClassName = ProClassName;
proclass.ProClassRegDate = GetTime();
proclass.next = IntPtr.Zero;
AddProClass(proclass);

}


在winform程序中调用时,刚开始第一次点击可以成功,后来多运行几次,或多点几次就会出现:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏” 这样的异常。 有没哪位高手知道的 告诉一下我,,,,在这里谢谢了!!
[解决办法]
整个struct都用IntPtr传非托管内存数据过去,大小自己根据内容定义。
[解决办法]
AddProClass 这个函数的申明呢,另外 AddProduct 函数是干什么的

读书人网 >C#

热点推荐