Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用c+时应用程序崩溃+;NET中的代码 我从下面的.NET中调用C++方法, [DllImport("CPCModule.dll", EntryPoint = "FuncName", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)] public static extern long FuncName([MarshalAs(UnmanagedType.LPStr)]string inFile, [MarshalAs(UnmanagedType.LPStr)]ref string OutFile); Public Void test() { string altFileName = string.Empty; string FileName = "{MyInputFullPath}" long ret; ret = ClassName.FuncName(FileName, ref altFileName); ........ } > C++代码如下, static ICPC* pCPC; extern "C" long _stdcall FuncName(char* inFile, char** outFile) { ...... hr = pCPC->UPPat2File(inFile, outFile); return hr; }_C++_.net - Fatal编程技术网 C++代码如下, static ICPC* pCPC; extern "C" long _stdcall FuncName(char* inFile, char** outFile) { ...... hr = pCPC->UPPat2File(inFile, outFile); return hr; },c++,.net,C++,.net" /> C++代码如下, static ICPC* pCPC; extern "C" long _stdcall FuncName(char* inFile, char** outFile) { ...... hr = pCPC->UPPat2File(inFile, outFile); return hr; },c++,.net,C++,.net" />

调用c+时应用程序崩溃+;NET中的代码 我从下面的.NET中调用C++方法, [DllImport("CPCModule.dll", EntryPoint = "FuncName", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)] public static extern long FuncName([MarshalAs(UnmanagedType.LPStr)]string inFile, [MarshalAs(UnmanagedType.LPStr)]ref string OutFile); Public Void test() { string altFileName = string.Empty; string FileName = "{MyInputFullPath}" long ret; ret = ClassName.FuncName(FileName, ref altFileName); ........ } > C++代码如下, static ICPC* pCPC; extern "C" long _stdcall FuncName(char* inFile, char** outFile) { ...... hr = pCPC->UPPat2File(inFile, outFile); return hr; }

调用c+时应用程序崩溃+;NET中的代码 我从下面的.NET中调用C++方法, [DllImport("CPCModule.dll", EntryPoint = "FuncName", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)] public static extern long FuncName([MarshalAs(UnmanagedType.LPStr)]string inFile, [MarshalAs(UnmanagedType.LPStr)]ref string OutFile); Public Void test() { string altFileName = string.Empty; string FileName = "{MyInputFullPath}" long ret; ret = ClassName.FuncName(FileName, ref altFileName); ........ } > C++代码如下, static ICPC* pCPC; extern "C" long _stdcall FuncName(char* inFile, char** outFile) { ...... hr = pCPC->UPPat2File(inFile, outFile); return hr; },c++,.net,C++,.net,在.NET代码中,我传递了一个输入文件。此输入文件将在UPPat2File方法中解码,并将其放入输出文件中。在上述代码之后,输出文件将填充正确的值,hr也将返回S_OK 但是在方法结束后,应该返回到.NET代码(并且altFileName应该用outFile填充)。但它却因以下异常而崩溃,“.NETdllname.dll中发生了类型为'System.AccessViolationException'的未处理异常。其他信息:试图读取或写入受保护的内存。这通常表示其他内存已损坏。”它不会返回到.NE

在.NET代码中,我传递了一个输入文件。此输入文件将在UPPat2File方法中解码,并将其放入输出文件中。在上述代码之后,输出文件将填充正确的值,hr也将返回S_OK


但是在方法结束后,应该返回到.NET代码(并且altFileName应该用outFile填充)。但它却因以下异常而崩溃,“.NETdllname.dll中发生了类型为'System.AccessViolationException'的未处理异常。其他信息:试图读取或写入受保护的内存。这通常表示其他内存已损坏。”它不会返回到.NET代码。

看起来像是并发问题。使用后您是否处理了文件读写器?是。另外,“FuncName”方法在许多地方都被调用(c++代码),并且工作正常。第一次,我尝试在.NET代码中调用它。通常,使用interop,它只是确保所有东西都对齐,并不断修改,直到工作正常为止。您已经指定了
CharSet.Unicode
,但随后指定了
UnmanagedType.LPStr
,这就是ANSI,我敢打赌这会使它混淆。要么删除字符集(这意味着它将使用ANSI),要么将字符串类型更改为Unicode。最后,您可能希望尝试将
outFile
设置为
StringBuilder
。删除CharSet.Unicode。出于同样的原因仍在引发异常。也尝试了StringBuilder。同样的问题。