डेवलपर के दौरान NullReferenceException!
मुझे बहुत अजीब समस्या है। मेरी परियोजना में सीएल + में डीएलएल लिखा गया है और सी # में एक जीयूआई लिखित है। और मैंने कुछ अंतःक्रियाशीलता के लिए कॉलबैक लागू किया है। मैंने योजना बनाई कि सी ++ डीएल कुछ परिस्थितियों में सी # कोड को कॉल करेगा। यह काम करता है ... लेकिन लंबे समय तक नहीं और मैं समझ नहीं पा रहा हूं क्यों। समस्या सी # भाग में टिप्पणी में चिह्नित यहाँ
सरलीकृत नमूना की पूरी कोड:सी ++ कॉलबैक के दौरान सी # फ़ंक्शन
सी ++ 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++)
{
Test(Text[i]);
}
}
}
};
सी # हिस्सा:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace CallBackClient
{
class Program
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void WriteToConsoleCallback(char Symbol);
[DllImport("CallbackSketch.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]
private static extern void InitializeLib();
[DllImport("CallbackSketch.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]
private static extern void SetDelegate(WriteToConsoleCallback Callback);
[DllImport("CallbackSketch.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]
private static extern void TestCall(string Text,int Length);
private static void PrintSymbol(char Symbol)
{
Console.Write(Symbol.ToString());
}
static void Main(string[] args)
{
InitializeLib();
SetDelegate(new WriteToConsoleCallback(PrintSymbol));
string test = "Hello world!";
for (int i = 0; i < 15000; i++)
{
TestCall(test, test.Length);// It crashes when i == 6860!!!! Debugger told me about System.NullReferenceException
}
}
}
}
समस्या यह है कि 6860 में दुर्घटनाओं है यात्रा! मेरा मानना है कि इस विषय में समस्या मेरे ज्ञान की कमी है। क्या कोई मेरी मदद कर सकता है?
ध्यान दें कि 'जीसी.किपलाइव' क्या है। – Yogu
यह इस विशिष्ट मामले में काम कर सकता है। –