下面是我的C++ DLL未处理的异常:System.AccessViolationException:尝试读取或写入
// DLL.cpp : Defines the exported functions for the DLL application.
#include "stdafx.h"
//#include <stdexcept>
#include<iostream>
using namespace std;
typedef void (*FunctionPtr)(int);
void (*FunctionPtr1)(int);
extern "C" __declspec(dllexport)void Caller();
extern "C" __declspec(dllexport)void RegisterFunction(FunctionPtr func_ptr);
extern void Caller()
{
int i = 10;
FunctionPtr1(i);
}
extern void RegisterFunction(FunctionPtr func_ptr1)
{
FunctionPtr1 = func_ptr1;
}
这个DLL会得到refernce从C#这里函数名和参数传递给C#功能.. 是我的C#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace test
{
class Program
{
[DllImport("C:/Users/10602857/Documents/Visual Studio 2010/Projects/DLL/Debug/DLL.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void Caller();
[DllImport("C:/Users/10602857/Documents/Visual Studio 2010/Projects/DLL/Debug/DLL.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern fPointer RegisterFunction(fPointer aa);
static void Main(string[] args)
{
Console.WriteLine("DLL Linking");
fPointer abc = new fPointer(ping);
RegisterFunction(abc); //send address of function to DLL
Caller(); //call from DLL
}
public delegate void fPointer(int s); // point to every functions that it has void as return value and with no input parameter
public static void ping(int a)
{
Console.WriteLine("ping executed " + a);
}
public static void add1()
{
Console.WriteLine("add executed");
}
}
}
C#代码是能得到我在C++ DLL paseed如下值
int i = 10;
FunctionPtr1(i);
m到处的sedired输出,但progrram在年底得到了与坠毁为什么我收到此以下execption
Unhandled Exception: System.AccessViolationException: Attempted to read or write
protected memory. This is often an indication that other memory is corrupt.
at test.Program.Caller()
?
什么包裹C++使用C++/CLI的dll?根据我的经验,这很容易! –
我是新来这..我可以实现它吗? –