I need use go generate .dll file the .dll defined the callback function like:
main.go
//export HandleDatagramCallback
func HandleDatagramCallback(f func(int32)) {
    // the f is c callback
    // maby the f is void* in c, like go unsafe.point()
    // but i dont known how unsafe.point convert to go function ?
    f(1)
}
go build generate .dll
go build -buildmode=c-shared -o webtransport.dll main.go
C code:
typedef void(__stdcall* f_funci)(void*);
void __stdcall NewCallback(int size) { // The function is called correctly
    cout << "callback: " << endl;
    cout << "size:" << size << endl; // here, the int size it's random mem ptr ??? it problem
}
int main() {
    HINSTANCE dll = LoadLibrary("webtransport.dll");
    if (!dll) {
    cout << "load dll failed!" << endl;
    return 0;
    }
    //
    f_funci callback = (f_funci)GetProcAddress(dll, ("HandleDatagramCallback") );
    if (!callback) {
        out << "could not locate the function HandleDatagramCallback" << endl;
        return 0;
    }
    void* c = NewCallback;
    // tell golang callback function ptr
    callback(&cb);
}
when i run c code, callback the function successed, but can not receive any parameter, please help, thank you
give go a C callback, golang invoke the callback, C receive parameters correctly i'm try use c struct, it's failed; like:
go code:
//export HandleDatagramCallback
func HandleDatagramCallback(f unsafe.Pointer) {
    var ccx = *(*Callback)(f)
    ccx.CallbackFn(123)
}
c code:
typedef void(*CallbackFn)(int i);
typedef struct {
    CallbackFn callbackfn;
} Callbacks;
... some same code
Callbacks cb;
cb.callbackfn = NewCallback;
callback((void*)(&cb));
use this idea, i think think the c void* like go unsafe.pointer and the c struct like go interface.
please help, thank very much