• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > vb调用vc的dll中遇到的问题

vb调用vc的dll中遇到的问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了vb 调用vc dll,vb和vc的区别,vb和vc能一起吃吗,口腔溃疡吃vb还是vc,vb vc等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: vb调用vc的dll中遇到的问题
描述:

(1)
我写了一个dll,我能否在通过调用dll中的函数设置dll中的数据
例:
//test.cpp
#include "stdafx.h"
int m = 100;//需要在调用dll时设置的数据
//声明
extern "C" __declspec(dllexport) void __stdcall SetData(int w);
extern "C" __declspec(dllexport) int __stdcall GetData();
//下面这个两个函数在vb中如何调用
extern "C" __declspec(dllexport) void __stdcall testp(unsigned char *pData);
extern "C" __declspec(dllexport) void __stdcall testpp(unsigned char **ppData);
BOOL APIENTRY DllMain( HANDLE 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;
}
//调用这个函数来设置m,测试过好象不行,不知道为什么
void __stdcall SetData(int w)
{
m = w;
}
int  __stdcall GetData()
{
return m;
}
(2)
还有下面两个函数在vb中如何调用,关键是参数类型是指针或指向指针的批针的调用
void __stdcall testp(unsigned char *pData)
{
}
void __stdcall testpp(unsigned char **ppData)
{
}


解决方案1:


函数声明如下:
extern "C"  void __stdcall SetData(int w);
extern "C"  int __stdcall GetData();
extern "C"  void __stdcall testp(unsigned char *pData,int cb);//cb为传入的数组元素个数
extern "C"  void __stdcall testpp(unsigned char **ppData,int cb);//cb为传入的数组元素个数
加入.def文件,导出以上函数
LIBRARY    "demoDll"
DESCRIPTION    "demoDll labrary"
EXPORTS
SetData @1
GetData @2
testp   @3
testpp  @4
在VB中如下生明函数:
Private Declare Sub SetData Lib "D:\VC_PROJECT\demoDll\demoDll" (ByVal w As Integer)
Private Declare Function GetData Lib "D:\VC_PROJECT\demoDll\demoDll" () As Integer
Private Declare Sub testp Lib "D:\VC_PROJECT\demoDll\demoDll" (b As Any,byval cb as integer)
Private Declare Sub testpp Lib "D:\VC_PROJECT\demoDll\demoDll" (bb As Any,byval cb as integer)
声明中我的 dll放在D:\VC_PROJECT\demoDll\demoDll路径下,如果把dll 放在你的可执行路径下可不指定路径.
在VB中使用如下:
  dim b(2) as byte
  b(0)=100
  b(1)=200
  b(2)=250
  testp b(0)'传入数组的第一个元素
  ''''''''''''''''''''''''''''''''''
  Dim bb(1, 1) As Byte
  bb(0, 0) = 100
  bb(0, 1) = 200
  bb(1, 0) = 20
  bb(1, 1) = 50
  testpp bb(0, 0)//传入二维数组的第一个元素

解决方案2:

2d指针只能通过Safearray调用,二进制指针建议通过文件作为中间媒介来通讯,
简单易用,童叟无期,当然用safearraya也是可以的,其他的数据结构
参见vb,vc参数传递问题

解决方案3:

第1个问题,如果你想在A进程中改变m的值,然后在B进程中查看结果的话,那么需要使用共享段:
#pragma data_seg("shared")
int m = 100;//需要在调用dll时设置的数据
#pragma data_seg()
#pragma comment(linker, "/section:shared,rws")


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • VB中怎样调用VC写的COM式的DLL
  • vc怎么调用vb写的com
  • VC调用VB编的DLL时如何传递参数
  • 用vc写的程序,如何在vb中调用
  • vc调用vb写的activedll
  • 用VC写的DLL,VB调用,怎样传递字符串
  • vc来调用vb写的Activexdll的问题
  • VC的DLL呼叫VB的Com为何无法显示VB的Form
  • VC如何调用VB写的DLL文件
  • VC中调用VB控件

相关文章

  • 2017-06-05 如何将DLL文件编译到最终的执行文件中去?
  • 2017-06-05 关于鼠标钩子得问题
  • 2017-06-05 link2005!!!!!!!!!!在线等待!
  • 2017-06-05 我想用vc实现可打开和编辑word文档
  • 2017-06-05 ieActiveX控件BLOCK_TYPE_IS_VALIDpHead->nBlockUse
  • 2017-06-05 关于核心对象计数?
  • 2017-06-05 子对话框上的listctrl控件创建失败?
  • 2017-06-05 一个别人的任意软件,它在后台运行,如何给它模拟发送键盘消息?
  • 2017-06-05 如何截获一台电脑的音频输入,包括输出的音频?
  • 2017-06-04 关于类库的问题!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 已知线程的句柄m_hThread如何获得线程的指针MyThread
    • 内流满面的菜鸟求指点-------Active控件制作C++开发-------
    • 关于word编程的问题VC6
    • 64位WIN7旗舰店版CGI初始化ADO错误GetLastError126,在命令行下直接调用却问题在XP下没也问题
    • 急:如何检测用户注销????
    • 请问如何根据进程得到调用进程的exe文件?
    • DLLHOST占用资源100%,困惑中
    • 求代码:用VC写的ActiveX控件,可以在网页上显示出来用
    • 请问我用sapi,中的tts已经实现语音播放,但是如何实现语音循环播放?
    • IShellLinkGetArguments方法获取快捷方式的参数获取不到,请看红色部分代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有