第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Golang CGO異常0x40010006

Golang CGO異常0x40010006

Go
qq_笑_17 2023-06-12 14:34:35
我正在嘗試使用 cgo 從 dll 運(yùn)行函數(shù)。該庫(kù)是用 c++ 編寫(xiě)的,所以我在這里創(chuàng)建了一個(gè) C 頭文件,其中包含定義的函數(shù)和一個(gè).cpp實(shí)現(xiàn)的文件。庫(kù).h:#ifdef __cplusplusextern "C" {#endifvoid* LoadEngine(char*);#ifdef __cplusplus}#endif庫(kù).cpp:#include <Engine.h> //the libraryvoid* LoadEngine(char *sn) {  Engine *e;  GetEngineObject(sn, &e); //function from the dll, here it fails  return (void*) e;}然后調(diào)用它:package main/*#include "lib.h"*/import "C"func main() {  e := C.LoadEngine(C.CString("foobar")  ...}我有g(shù)o1.12 windows/amd64 和mingw-w64-posix-seh也試過(guò)mingw-w64-posix-sjlj, mingw-w64-win32-seh, mingw-w64-win32-sjlj, 但結(jié)果是一樣的, 或者根本不編譯用go buildand 編譯它:#cgo windows CFLAGS: -IC:/Engine/Inc#cgo windows CPPFLAGS: -IC:/Engine/Inc#cgo windows LDFLAGS: -LC:/Engine/Bin64 -lEngine -lEngineObj -lole32 -loleaut32 -luuid我也嘗試用 mingw 捕獲異常__try1,__except1但無(wú)論如何它都失敗了。嘗試了不同的 mingw 版本,使用-ldflags="-linkmode internal"但是這不會(huì)編譯并且-ldflags="-linkmode external"也會(huì)出現(xiàn)此異常。編輯:還嘗試從 C 程序調(diào)用LoadEngine函數(shù) (from ),它工作正常。lib.h編譯lib.cpp為. g++_ lib.o并將它鏈接到test.c我剛剛調(diào)用LoadEnginejust frommain函數(shù)的地方。所以也許有什么不對(duì)勁怎么把庫(kù)鏈接到cgo?
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

由于某些原因,在 win10+ 上它會(huì)提高DBG_PRINTEXCEPTION_C.?這是由OutputDebugStringW沒(méi)有調(diào)試器正在偵聽(tīng)引起的。

我認(rèn)為通常它會(huì)用微軟的__try 和 __except來(lái)完成,但在 MinGW 中只有 __try1 和 __except1,我認(rèn)為它們只適用于 32 位系統(tǒng)(很少有相關(guān)文檔)

但我發(fā)現(xiàn),你可以添加一個(gè)異常處理程序

所以現(xiàn)在 lib.cpp:

#include <Engine.h> //the library

#ifdef _WIN32

#include <windows.h>


LONG WINAPI VectoredHandler(struct _EXCEPTION_POINTERS *ExceptionInfo) {

? ?UNREFERENCED_PARAMETER(ExceptionInfo);??

? ?return EXCEPTION_CONTINUE_EXECUTION;? //just continue

}

#endif



void* LoadEngine(char *sn) {

#ifdef _WIN32

? PVOID handler = AddVectoredContinueHandler(1, VectoredHandler);

#endif

? Engine *e;

? GetEngineObject(sn, &e);

#ifdef _WIN32

? RemoveVectoredContinueHandler(handler);?

#endif

? return (void*) e;

}

因?yàn)槭褂迷搸?kù)以加載引擎開(kāi)始并以卸載它結(jié)束,并且引擎是一個(gè)單例,所以我剛剛將 also 設(shè)為PVOID handler全局單例并且AddVectoredContinueHandleris inLoadEngine和RemoveVectoredContinueHandleris in UnloadEngine。


查看完整回答
反對(duì) 回復(fù) 2023-06-12
  • 1 回答
  • 0 關(guān)注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)