C++ 建DLL,VB调用问题

joyzhanghj 2008-04-04 01:44:56
c++代码:
dll1.cpp
#define out _declspec(dllexport)
#include <math.h>
out _stdcall double arcsin(double x)
{
return asin(x);
}
------------------------------------------
dll1.h
#define in _declspec(dllimport)
in _stdcall double arcsin(double x);
-------------------------------------------
dll1.def
LIBRARY "testdll.dll"

EXPORTS
arcsin
-------------------------------------------
VB:
Private Declare Function arcsin Lib "zhj.dll" (ByVal x As Double) As
Double
Private Sub Command1_Click()
f = arcsin(0.5)
Print f;
End Sub
----------------------------------------------
dll可以导出,可是VB调用的时候为什么显示 错误"16"表达式太复杂
新手上路,望高手解答,就是想vb可以直接调用VC的反三角函数
...全文
200 18 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
joyzhanghj 2008-04-10
  • 打赏
  • 举报
回复
mymtom 的代码给予20分,分析给予100分,感谢
joyzhanghj 2008-04-10
  • 打赏
  • 举报
回复
谢谢mymtom ,谢谢仔细看完我的代码..这个代码我想如果是真的想帮助我的话,试一下就知道是怎么回事了,非常感谢
mymtom 2008-04-06
  • 打赏
  • 举报
回复
楼主的错误在于把__stdcall 放在了 double 后面,
如果仔细一点, 在编译的时候会有警告的, 楼主忽略了警告了.
mymtom 2008-04-06
  • 打赏
  • 举报
回复
用.def文件的时候不要使用dllexport

// arcsin.cpp
#include <math.h>

double __stdcall arcsin(double x)
{
return asin(x);
}


accsin.def
[code=BatchFile]
LIBRARY "arcsin.dll"

EXPORTS
arcsin
[/code]
lori_c 2008-04-06
  • 打赏
  • 举报
回复
我看了一下原来写的代码 是加了extern "C"的
cnzdgs 2008-04-06
  • 打赏
  • 举报
回复
f = arcsin(0.5)
Print f;
这两行明显不符合VB语法。

另外,_stdcall double arcsin(double x)这样写在VC中编译也不会通过。
帅得不敢出门 2008-04-05
  • 打赏
  • 举报
回复
可是是类型问题
Supper_Jerry 2008-04-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Kenmark 的回复:]
貌似C double与VB double是不兼容的,使者用any 或者variant
[/Quote]
很可能。
我啃 2008-04-05
  • 打赏
  • 举报
回复
貌似C double与VB double是不兼容的,使者用any 或者variant
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
你把参数改为指针,返回值使用参数传出来试试.
int arcsin(double* data,double* result);
[/Quote]
你试了没有,因为double是8字节的,可能参数处理的时候 两种语言有区别.
joyzhanghj 2008-04-05
  • 打赏
  • 举报
回复
难道这就没人会????哎...........哈哈哈
joyzhanghj 2008-04-05
  • 打赏
  • 举报
回复
自己顶一下,等待解决者
joyzhanghj 2008-04-04
  • 打赏
  • 举报
回复
我调用过程都有啊,上面有代码啊...
VB如何引入指针...VB不支持指针吧.....
VB代码和C++代码我都写在顶楼了啊

回楼上的_stdcall我已经加了...我这个dll代码做简单的 return a+b; 可以成功返回并被VB调用
extern “C”不行的哇,我是VB调用...

望高手给予 具体代码 解答....这个帖子我会加到100分....要24小时,谢谢
lori_c 2008-04-04
  • 打赏
  • 举报
回复
原来有完成过VB调用c++函数的问题,不过不太记得了,感觉是_stdcall的问题,应该加extern “C”吧,不是很确定
sheenl 2008-04-04
  • 打赏
  • 举报
回复
你怎么调用的?
joyzhanghj 2008-04-04
  • 打赏
  • 举报
回复
还是不行啊,具体c++的指针返回值,VB要如何才能获取呢???望高手给予解答,我继续加分....
  • 打赏
  • 举报
回复
你把参数改为指针,返回值使用参数传出来试试.
int arcsin(double* data,double* result);
joyzhanghj 2008-04-04
  • 打赏
  • 举报
回复
我是楼主
Private Declare Function arcsin Lib "zhj.dll" (ByVal x As Double) As
Double
这句写错了
应该是
Private Declare Function arcsin Lib "testdll.dll" (ByVal x As Double) As
Double
不过还是不行啊....
错误"16"表达式太复杂

相关推荐

本课程主要是针对ILRuntime设计一个独立的脚本热更新框,框架的优势:

1.将代码热更脱离Assetbundle资源热更,独立的部分更适用于各种不同的框架。
2.加快项目的逻辑更新,bug修复.(后期修bug,多数情况下并不用动到资源,只需要更新脚本代码,无需重走资源打包发布流程,大大提升效率)
3.提供热更模式和正常开发模式的快速切换接口,可以让队友像平常一样去开发.
4.不依赖市面上的任何AB框架,完全兼容市面上各种不同的AB框架.
5.重点:希望通过它,帮助你学习、了解ILRuntime真正在项目中的应用.

框架的将提供以下这些接口,这些接口将从0开始,在Unity里将C#脚本编译成dll,然后将dll放到服务器上,再将dll下载下来,进行加载,到最后从Unity主工程调用热更新的代码逻辑.

1.Create hotfixdll接口
	将热更部分的代码 编译成dll
	生成dll版本配置(MD5)

2.更新对比接口
	本地跟服务器的dll进行版本对比
	
3.下载热更dll
	下载dll本身的文件
	下载版本记录文件
	
4.加载热更dll
	加载dll
	实例化:AppDomain
	初始化:
	注册跨域继承适配器
	注册委托适配器
	LitJson重定向
	调用性能优化(CLR绑定功能)
	调用热更接口Hotfix.HotfixApplication.Main 进入热更逻辑
	
5.ILMonoBehaviour
	用于监听组件的生命周期,实际是桥接(调用)热更的逻辑
	Awake
	Start
	Enable
	Update
	LateUpdate
	.......
	
6.添加其他常用的库
	DOTween
	LitJson
	Spine
	Google.Protobuf
	TextAnimation
	可以根据上面的方式,自行添加依赖的库...

 

发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-04-04 01:44
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下