c++中代码:头文件中定义一个结构:
struct DataBuffer
{
string dataName;
long address;
long size;
};cpp文件中代码如下:
extern "C" __declspec(dllexport) DataBuffer* run(string inputDataURL, string runtimeFilePath)
{
DataBuffer* buffer=(DataBuffer*)malloc(sizeof(DataBuffer));
int a[10][10]={{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},
{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},
{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},
{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},
{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10}};
//bufferInfo=new DataBufferInfo(inputDataURL,a[0][0],sizeof(a));
buffer->dataName=inputDataURL;
//strcpy(buffer->dataName,inputDataURL);
buffer->address=(long)a;
buffer->size=sizeof(a);}
C#中cppdll.cs中代码如下:
public class cppdll
{
[DllImport("GFInput.dll", EntryPoint = "run", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr run(string uml, string name);
}
[StructLayout(LayoutKind.Sequential)]
public struct DataBuffer
{
string dataName;
long address;
long size;
};c#中Program.cs中代码如下:
static void Main(string[] args)
{
string a = "abcde";
string b = "cdefg";
IntPtr intp = cppdll.run(a, b);
}
这只是个测试程序,在运行时总是在IntPtr intp = cppdll.run(a, b)处抛出异常:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。烦请各位不吝赐教,告诉小弟应该如何修改,如何调用c++的dll。在此先谢过了各位了。
struct DataBuffer
{
string dataName;
long address;
long size;
};cpp文件中代码如下:
extern "C" __declspec(dllexport) DataBuffer* run(string inputDataURL, string runtimeFilePath)
{
DataBuffer* buffer=(DataBuffer*)malloc(sizeof(DataBuffer));
int a[10][10]={{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},
{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},
{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},
{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10},
{1,2,3,4,5,6,7,8,9,10},{1,2,3,4,5,6,7,8,9,10}};
//bufferInfo=new DataBufferInfo(inputDataURL,a[0][0],sizeof(a));
buffer->dataName=inputDataURL;
//strcpy(buffer->dataName,inputDataURL);
buffer->address=(long)a;
buffer->size=sizeof(a);}
C#中cppdll.cs中代码如下:
public class cppdll
{
[DllImport("GFInput.dll", EntryPoint = "run", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr run(string uml, string name);
}
[StructLayout(LayoutKind.Sequential)]
public struct DataBuffer
{
string dataName;
long address;
long size;
};c#中Program.cs中代码如下:
static void Main(string[] args)
{
string a = "abcde";
string b = "cdefg";
IntPtr intp = cppdll.run(a, b);
}
这只是个测试程序,在运行时总是在IntPtr intp = cppdll.run(a, b)处抛出异常:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。烦请各位不吝赐教,告诉小弟应该如何修改,如何调用c++的dll。在此先谢过了各位了。
string dataName;
long address;
c++ 要为c#提供调用,最好不要用string而用char*
win32平台下
long 在c++中是32位的,不是64位
long 在c#中是64位的
or
bool Run(out DataBuffer outputData,string inputDataURL, string runtimeFilePath)
public static extern IntPtr run(string uml, string name);
调用如下:
IntPtr intp = cppdll.run(a, b);
对于extern "C" __declspec(dllexport) bool Run(DataBuffer* outputData,char* inputDataURL, char* runtimeFilePath)函数,我如何在c#中定义,又如何将intp作为参数传递给该函数。
谢谢了!
另外不要用malloc,会造成内存泄漏。