VS,在解决方案中新建一个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 ponentModel;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了;