VS2015,在解决方案中新建一个C++ DLL项目,一个C# Winform项目;
dllmain.cpp;
#include "stdafx.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;
}
这个是自动生成;case DLL_xxxx_xxxx,这几个是DLL消息;
stdafx头文件和C文件不用管;
DllTest2.cpp里面添加3个函数;
#include "stdafx.h"
#include "DllTest2.h"
#include <string.h>
DllTest2_API int __stdcall Add(int a, int b)
{
return a + b;
}
DllTest2_API int __stdcall Multitwo(int a, int b)
{
return a * b;
}
DllTest2_API char __stdcall getc1(char c1)
{
return c1;
}
DllTest2.h里面为三个函数添加导出说明;说明此dll导出的3个函数;
#define DllTest2_API __declspec(dllexport)
EXTERN_C DllTest2_API int __stdcall Add(int a, int b);
EXTERN_C DllTest2_API int __stdcall Multitwo(int a, int b);
EXTERN_C DllTest2_API char __stdcall getc1(char c1);
C#项目进行调用测试;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace test2
{
public partial class Form1 : Form
{
[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]
extern static int Add(int a, int b);
[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]
extern static int Multitwo(int a, int b);
[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]
extern static char getc1(char c1);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int c = Add(100, 67);
textBox1.Text = textBox1.Text + c.ToString() + Environment.NewLine;
textBox1.Text += Environment.NewLine;
}
private void button2_Click(object sender, EventArgs e)
{
int c = Multitwo(99, 7);
textBox1.Text = textBox1.Text + c.ToString() + Environment.NewLine;
textBox1.Text += Environment.NewLine;
}
private void button3_Click(object sender, EventArgs e) //char 测试
{
char c1 = 'f';
char d1 = getc1(c1);
textBox1.Text = textBox1.Text + d1 + Environment.NewLine;
textBox1.Text += Environment.NewLine;
}
}
}
生成解决方案;此处C#调用写的是DLL生成的绝对路径;C#不用引用DLL项目;每次修改了dll代码,重新生成解决方案;
启动C#项目;可以测试调用C++ DLL了;