[問題] 在C#使用C++物件遇到的問題
最近在開發將客戶提供的資源打包成供自家C#使用的DLL檔,
但執行到某個函式會出現錯誤,錯誤如下,
"0x00007FFE66AE1CEC (UniversalUS.dll) 中 (於 Sample.exe)
擲回例外狀況: 0xC0000005: 讀取位置 0x0000000000000064 時發生存取違規。"
想問問是否我的寫法有誤..
範例檔案如下,
客戶提供的資源以3rd.h和3rd.dll表示。
Test.h檔案內容如下,
include "3rd.h"
class __declspec(dllexport) Test
{
private:
//define in 3rd.h
3rdTest* 3rdtest;
public:
Test(){
HINSTANCE hDll=LoadLibrary("3rd.dll");
typeof int(*CreateObj)(3rdTest** p3rdTest)
CreateObj createObj=(CreateObj)GetProcAddress((HMODULE)hDll,"l
pP
createObj(&3rdtest);
}
~Test()
{
3retest.Release();
}
int GetOtherObj(OtherObj** obj)
{
return 3rdtest->GetOtherObj(obj);
}
}
ExternTest.h如下
#include "Test.h"
extern "C"
{
extern __declspec(dllexport) Test* CreateTest();
extern __declspec(dllexport) void DisposeTest(Test* pTest);
extern __declspec(dllexport) int GetOtherObj(Test* test);
}
Test.cpp如下
#include "ExternTest.h"
extern "C"
__declspec(dllexport) Test* CreateTest()
{
return new Test();
}
extern "C"
__declspec(dllexport) void DisposeTest(Test* pTest)
{
pTest->~Test();
}
extern "C"
__declspec(dllexport) OtherObj* GetOtnerObj(Test* pTest)
{
OtherObj* otherObj;
pTest->GetOtherObj(&otherObj);
return otherObj;
}
在C#內使用狀況如下,
ShTest.cs
public class ShTest:IDisposable
{
#region dllimport
[DllImport("Test.dll")]
private static extern IntPtr CreateTest();
[DllImport("Test.dll")]
private static extern void DisposeTest(IntPtr pTest);
[DllImport("Test.dll")]
private static extern IntPtr GetOtherObj(IntPtr pTest);
#endregion
#region ShapeFunction
IntPtr pTest;
public ShTest()
{
pTest=CreateTest();
}
public void Dispose()
{
DisposeTest(pTest);
}
public ShOtherObj GetOtherObj()
{
IntPtr pOtherObj=GetOtherObj(pTest);
return new ShOtherObj(pOtherObj);
}
#endregion
}
執行到IntPtr pOtherObj=GetOtherObj(pTest);時會跳出存取違規的錯誤訊息,請問是否
我的寫法有錯誤呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 185.213.82.181 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1701073753.A.439.html
※ 編輯: Dong0129 (185.213.82.181 臺灣), 11/27/2023 16:30:56
推
11/27 17:22,
1年前
, 1F
11/27 17:22, 1F
推
11/27 17:24,
1年前
, 2F
11/27 17:24, 2F
推
11/27 17:27,
1年前
, 3F
11/27 17:27, 3F
→
11/27 17:28,
1年前
, 4F
11/27 17:28, 4F
→
11/27 17:28,
1年前
, 5F
11/27 17:28, 5F
推
11/27 21:53,
1年前
, 6F
11/27 21:53, 6F
推
11/27 22:28,
1年前
, 7F
11/27 22:28, 7F
有少打的括號或錯字抱歉,對方回應了,要指定工作目錄才行,謝謝各位幫忙!
※ 編輯: Dong0129 (185.213.82.186 臺灣), 11/29/2023 11:10:19
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章