扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如果DLL不是你写的,且你要调用的函数不是__stdcall声明,VB直接调用是会报错的
我们提供的服务有:网站建设、成都做网站、微信公众号开发、网站优化、网站认证、宁城ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的宁城网站制作公司
如果DLL是你写的,注意调用约定问题,并看以下代码
***************************************************
以下是DLL代码
.cpp里这么写
extern "C"__declspec(dllexport) void __stdcall HelloWorld()
{
MessageBox(NULL,"HelloWorld","HelloWorld",NULL);
}
.def里这么写
LIBRARY "XXXX"
EXPORTS
; 此处以下添加
HelloWorld@1
*************************************************
vb里这么写
Public Declare Sub HelloWorld Lib "XXXX.dll" ()
然后调用就可以了,上面是VB的代码,或许VB.net的也差不多
两个项目的依赖关系重新设置一下,然后那个C的项目重新生成一下试试
在c语言中每一个变量都有两个属性一个是值,一个是址。比如inta=2;变量a的值是2,变量a的地址,可以用取地址
操作符
获取,即a。因此以C语言的函数传递中具备两种方式传递参数,一种是传址,一种传值。比如voidf1(intv){;}//函数f1v
按照我的理解,你的这个需求是没有办法做到的, 除非C#的dll被封装为了一个COM组件并且注册了,但是你的这个dll已经写成了,所以理论上来说应该不是com,而C#的程序集是不提供向前兼容的,所以用一个老的语言调用新的技术的组件是做不到的,不过也有一种可能性,不过很难实现,大体逻辑这样,首先通过vb调用一个native的组件,用C或者c++完成,在这个组件里面加载clr,在clr里面加载c#的程序集,实例化对象,执行调用
------------------------------------------00000000000000000000000000++++++++++++++++++
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流