相关疑难解决方法(0)

C++回调到C#函数期间的NullReferenceException

开发商!
我有一个非常奇怪的问题.我的项目有用C++编写的DLL和用C#编写的GUI.我已经实现了一些互操作性的回调.我计划在某些情况下C++ dll会调用C#代码.它有效...但不长,我不明白为什么.在C#部分注释中标记的问题
这里是简化示例的完整代码:

C++ DLL:

#include <SDKDDKVer.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>

BOOL APIENTRY DllMain( HMODULE hModule,
                    DWORD  ul_reason_for_call,
                    LPVOID lpReserved
                                    )
    {
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}

extern "C" 
{    
    typedef void  (*WriteSymbolCallback) (char Symbol); 
    WriteSymbolCallback Test;

    _declspec(dllexport) void InitializeLib()
    {
        Test = NULL;
    }

    _declspec(dllexport) void SetDelegate(WriteSymbolCallback Callback)
    {
        Test = Callback;
    }

    _declspec(dllexport) void TestCall(const char* Text,int Length)
    {
        if(Test != NULL)
        {
            for(int i=0;i<Length;i++)
            { …
Run Code Online (Sandbox Code Playgroud)

c# c++ callback marshalling nullreferenceexception

7
推荐指数
1
解决办法
2532
查看次数

将对象转换为void*并返回?

我正在尝试编写一个C函数的包装器,它需要一个函数指针和任意用户数据(void*).函数指针我已经弄清楚如何处理使用委托,但我无法弄清楚如何将一个转换object成一个void*.

我可以ref object改为,因为它的行为类似于指针AFAIK,但是当我尝试时,我会得到一个例外

在从非托管VARIANT到托管对象的转换过程中检测到无效的VARIANT.将无效的VARIANT传递给CLR可能会导致意外的异常,损坏或数据丢失.

这个"解决方案"可能对我有用,但我认为必须有一种方法可以将任意数据传递给C DLL,以便以后可以传回来?

c c# interop

6
推荐指数
1
解决办法
3120
查看次数

标签 统计

c# ×2

c ×1

c++ ×1

callback ×1

interop ×1

marshalling ×1

nullreferenceexception ×1