AccessViolationException

时间:2012-10-11 06:01:50

标签: c# visual-c++

我在mfc(这是一个dll类型项目)中有一个函数,它提取一个zip文件并创建最终显示文件的文件夹,现在这在C#.Net项目中使用,所以当我从dll调用这个方法时C#.net项目并非所有文件都被提取出来并显示错误,发生了AccessViolationExceptions。

我想这个在.net项目中提取文件的缓冲区无法分配那么多内存。 我需要建议......

BYTE *buffer;
buffer = new BYTE[oFileData.lActualSize];
if( buffer == 0 )
{
_tcscpy((*_errorText), szFilesFolder.GetBuffer() );
szFilesFolder.ReleaseBuffer();
CoTaskMemFree((*_errorText));

return FAILTOALLMEM;
}

mfc中函数的签名:

extern "C" _declspec(dllexport) int extractCompressedFile( TCHAR* _szFilePath, TCHAR* _extractPath, TCHAR** _errorText )

使用C#.Net调用

IntPtr BackupDLL = NativeMethods.LoadLibrary(somepath);
IntPtr procaddr = NativeMethods.GetProcAddress(BackupDLL, "extractCompressedFile");
C_ExtractFiles func = (C_ExtractFiles)Marshal.GetDelegateForFunctionPointer(procaddr,typeof(C_ExtractFiles));
res = func(Program.ptc_SourFilePath, ptc_DestinationFilePath, ref errtext);
Program.strResult = res.ToString();



static class ExtNativeMethods
{
[DllImport("kernel32.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr GetProcAddress(IntPtr hModule, [In][MarshalAsAttribute(UnmanagedType.LPStr)] string procedureName);
} 

0 个答案:

没有答案