VS2017自己用C++写的DLL,用C#调用出错,找不到入口,请各位大佬帮忙看下

独伴丶梨花影 2020-07-08 04:19:29
这是C++的头文件代码:


这是C++的CPP文件代码:


这是C#的代码

环境都是VS2017DE X64
...全文
2329 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
独伴丶梨花影 2020-08-15
  • 打赏
  • 举报
回复
引用 2 楼 OrdinaryCoder 的回复:
1.感觉你Vision_API宏好像定义错了
直接这么定义函数吧 extern "C" __declspec(dllexport) int __stdcall add(int x,int y);
2.看看C++工程是否有.def 文件 把对外的函数名粘贴进去


引用 6 楼 Null_Link 的回复:
[DllImport("Dll1.dll", EntryPoint = "add1")]
public static extern int add1(int a,int b);

感谢!
Null_Link 2020-08-14
  • 打赏
  • 举报
回复
[DllImport("Dll1.dll", EntryPoint = "add1")]
public static extern int add1(int a,int b);
gd6321374 2020-07-08
  • 打赏
  • 举报
回复
天天写这种的,给你个例子

#ifndef CallReader	
#define CallReader			__stdcall
#else
#define	CallReader			__cdecl
#endif

#ifdef	READER
#define ReaderDLL			extern "C"	__declspec(dllexport)
#else
#define	ReaderDLL			extern "C"	__declspec(dllimport)
#endif
ReaderDLL int CallReader ReadAPlus(UCHAR addr, UCHAR block, UCHAR blockCount, UCHAR dataStream[], UCHAR *dataStreamLength, UCHAR maxLen);


ReaderDLL int CallReader ReadAPlus(UCHAR addr, UCHAR block, UCHAR blockCount, UCHAR dataStream[], UCHAR *dataStreamLength, UCHAR maxLen)
{
	int packLength = 0, status = 0, ik = 0;
	UCHAR packBuffer[128] = {0};

	USBHidExitCommunicate();
	for(ik=0; ik<3; ik++)
	{
		status = USBHidInitCommunicate();
		if(status == DEVICE_ERROR_OK)
			break;

		Sleep(10);
	}

	if(ik == 3)
		return DEVICE_ERROR_NO_CONNECT;

	packBuffer[0] = 0;
	packBuffer[1] = blockCount;
	packBuffer[2] = block;

	status = USBCommandPacketDataTransfer(addr, 0, CMD_APLUS_HLRead, packBuffer, 9);
	if(status)
		return status;

	status = USBCommandReceivePacketData(packBuffer, &packLength, sizeof(packBuffer));
	if(status)
		return status;

	int dataLength = (packBuffer[OFFSET_DATALENGTH_H] << 8) + packBuffer[OFFSET_DATALENGTH_L] - 1;
	if(dataLength > maxLen)
		return DEVICE_ERROR_OUT_OF_SIZE;

	if(packBuffer[OFFSET_STATUS] != OFFSET_STATION)
		return packBuffer[OFFSET_STATUS];

	dataStreamLength[0] = dataLength;
	memcpy(dataStream, &packBuffer[OFFSET_DATA_BEGIN + 8], dataStreamLength[0]);

	return DEVICE_ERROR_OK;
}
C# 调用


     [DllImport("ICReader.dll", EntryPoint = "ReadAPlus", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
     public static extern int ReadAPlus(byte addr, byte block, byte blockCount, ref byte dataStream, ref byte dataStreamLength, byte maxLen);

github_36000833 2020-07-08
  • 打赏
  • 举报
回复
引用 2 楼 OrdinaryCoder 的回复:
... 直接这么定义函数吧 extern "C" __declspec(dllexport) int __stdcall add(int x,int y); ...
+1 c++会对导出函数进行“名字修饰”(name mangling)。比如add1导出可能被修饰成类似"?add1@@YAXHD@Z"之类的名字。 因此,你要用extern "C" 来告诉编译器不要mangling。 查看导出可以用dumpbin.exe(再VisualStudio命令行下就有)。 dumpbin.exe /EXPORTS Dll1.dll
OrdinaryCoder 2020-07-08
  • 打赏
  • 举报
回复
补一条 你在C#声明的时候 没有定义C++函数名 那么C#函数名应该和C++函数名一样吧 C#是Add C++Add1 是不是就不对了
OrdinaryCoder 2020-07-08
  • 打赏
  • 举报
回复
1.感觉你Vision_API宏好像定义错了 直接这么定义函数吧 extern "C" __declspec(dllexport) int __stdcall add(int x,int y); 2.看看C++工程是否有.def 文件 把对外的函数名粘贴进去
独伴丶梨花影 2020-07-08
  • 打赏
  • 举报
回复
add改成add1也是一样的,报一样的错误
前言 这个浏览框支持库好像我在之前是没有发布过的,单其实是发布过了的(当时被删了),后来呢,就把这是给忘了(程序是16年开的工,拖了3年),前些日子终于想起来有这件事,于是我就对MiniBlink浏览框单独从以前的支持库抽离出来,作为单独的控件库,对于曾经期待的易友表示由衷的抱歉! 正文 对于这个支持库,我改自原生的MiniBlink,大概有200多个命令,所以支持库略微显得有点大,但是对于基本的功能的实现是很完善的。这里应该有一张图: 提示 :由于全部使用原生命令,所以本支持库中不带有集成化的填表命令,需要自己编!!对于原生的MiniBlink,有以下优点:         Miniblink能用来做什么             1. 使用web技术栈构建桌面Apps UI,开发效率更高,维护更简单             1. 通过嵌入miniblink,实现打包web功能至本地应用。可实现财务报表、OA企业办公自动化系统                 功能特性                 - 小巧、容易集成                     - Miniblink压缩后仅几M左右的体积,只需一个dll,通过纯C接口,数行代码即可集成到各种软件                     - 小巧,压缩后仅几M大小。                     - 接口纯C,单线程,交互简单。                     - C++C#,Delphi等调用方便。                 - 无比强大的功能、随心所欲的定制(完善的HTML5支持,对各种前端库友好)                     - 关闭跨域开关后,可以使用各种跨域功能。                     - 整合融入nodejs,可以无缝使用nodejs各种开源框架。                     - 网络资源拦截,替换任意网站任意js为本地文件。                     - 可无缝模拟移动环境。 好了好了,其实程序中是有例子的,可以慢慢看,这里又应有一张图:     对于支持库的全部源码,我已经打包(fne转lib的是用的SalHe大佬的fne转lib) 下面是一些调试过程中的图片: 百度 审查元素 普通填表 验证码 跨框架填表 对于功能性的东西基本介绍完了下面是一张支持库代码的图片:

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧