1

mfc (dll タイプのプロジェクト) には、zip ファイルを抽出し、最終的にファイルを表示するフォルダーを作成する関数があります。これは C#.Net プロジェクトで使用されるため、C# で dll からこのメソッドを呼び出すと、. net project では、すべてのファイルが抽出されるわけではなく、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);
} 
4

0 に答える 0