vb调用VC动态连接库的总结

如何用VB编写自己的DLL文件,并调用其中的函数 如何用VB编写自己的DLL文件,并调用其中的函数? 阅读详情
 
第一 VB中调用VC++开发的DLL
 
再谈在 VB 中调用 VC++ 开发的 DLL
 
 
 
 
 
 
[ 来源: xue5.com | 作者:学网 | 时间: 2005-5-8 ]
 
 

 共有 133位[学网]的网友和你一起阅读过:再谈在VB中调用VC++开发的DLL

 
 
 
 
 
 
 
 
   近日开发一个程序,用到动态链接库,在 VB 中调用时遇到了一些问题。我查了一些资料,也看了一下 优快云 上的文章,感觉这些文章对在 VB 中调用 VC++ 开发的 DLL 这一问题阐述得不够详细。因此在我的问题得到解决之余,特为初接触 DLL 的朋友们写下这篇文章。
本文中关于调用约定的解决方法,也适用于解决其它编程语言之间 DLL 调用的兼容问题。
 
  ①关于 DLL 的创建与调用
  使用 VC++ 的向导即可。具体操作如下:打开菜单“ File/New ”→选择“ Projects/Win32 Dynamic-Link Library ”→选择“ A simple DLL project ”即可。这时系统会自动生成 3 个文件: *.cpp , stdafx.cpp , stdafx.h 。
  之后将入口函数 DLLMain() 补充完整,再添加你自定义的函数的代码。如果你自定义的函数很多,可以将这些函数的声明部分统一写入一个头文件中。再在 .cpp 文件首部用“ #include ”语句引入这个头文件。注意函数声明前要加上“ __declspec(dllexport) ”。
  (如果你建 DLL 时选择的是第三种类型 ( 加入示例代码 ) ,则在函数声明及定义前都要加上系统定义的宏“ *_API ”。)
  在 VB 中用如下语句声明:“ Declare Function 函数名 Lib " 完整路径 / 文件名 .dll" [Alias " 函数别名 "] (ByVal 变量 1 As 类型 1, ByVal 变量 2 As 类型 2, … ) As 类型 3 ” ,与调用 API 函数类似。
  注意:若在窗体代码的“通用”部分使用,“ Declare ”前要加“ Private ”;若在 Moudle 中使用,“ Declare ”前要加“ Public ”。若将 DLL 文件放在“ /Windows/System ”或“ /WinNT/System32 ”目录下,“ Lib ”后只写出 DLL 主文件名即可。
具体的实例代码见④(修正后的,可直接运行)。 
 
  ②关于入口点
  如上编写 Cipher.dll ,运行,出现错误信息“找不到 DLL 入口点 (Error 53) ”。出现这一错误的原因是 C++ 编译器在编译时对函数名 Encrypt 作了修改。打开快速查看程序( D:/WINNT/System32/Viewers/QuikView.exe ) , 将 Cipher.dll 拖入查看窗口,找到字段 “?Encrypt@@YAHHH@Z ” , 发现函数名被加了一串字符。
  解决方法有二。第一,直接在 VB 声明中将“ ?Encrypt@@Y AHHH@Z ”作为别名放在“ Alias ”后即可;第二,在 Cipher.dll 代码中在语句“ __declspec(dllexport) int __stdcall Encrypt(int p, int k); ” 前加上“ extern "C" ” ,编译后,用 QuikView 查看,函数名变为“ _Encrypt ”,之后再在 VB 声明中做相应调整即可。
  (对于使用宏的 DLL ,在“ #define ”语句中,对宏“ Cipher_API ”的替换值做更改即可。)
进行了③的更改后,程序又找不到入口点了。再用 QuikView 查看,发现函数名变为 “_Encrypt@8 ”。还有解决方法。在 Cipher.dll 工程中添加一个文本文件,命名为“ Cipher.def ” , 添加代码如④。编译后再用 QuikView 查看,函数名变回“ Encrypt ”,在 VB 中调用,运行正常。
 
  ③关于调用约定
  采用②中第二种解决方法,运行,出现错误信息“ DLL 调用约定错误 (Error 49) ”。原因是调用约定共有 4 种方式: __fastcall 、 __pascal 、 __stdcall 、 __cdecl , VC++ 默认调用方式为 __cdecl ,而 VB 默认调用方式则为 __stdcall 。解决方法是,更改代码如下(限定调用方式):
   extern “C” __declspec(dllexport) int __stdcall Encrypt( int p, int k);
  …………
   int __stdcall Encrypt( int p, int k)
    {
           int c = p+k;
           return c;
    }
 
  ④源代码
Cipher.dll :
  Cipher.cpp :
    // 引入预编译头文件
   #include “stdafx.h”
    // 声明我的函数
extern “C” __declspec(dllexport) int __stdcall Encrypt( int p, int k );
    //DLL 入口函数
       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;
       }
 
        // 我的函数
        int __stdcall Encrypt ( int p, int k )
        {
            int c = p + k ;
            return c ;
        }
 
  Cipher.def :
   LIBRARY Cipher
   EXPORTS Encrypt
 
编译后,将 Cipher.dll 复制到“ D:/WINNT/System32”目录。
在 VB 中调用:
   Option Explicit
Private Declare Function Encrypt Lib “Cipher” _
( ByVal p As Long, ByVal k As Long) As Long
        Private Sub Form_Load()
   Dim c As Long
   c = Encrypt(24, 8)
   Text1.Text = c
   End Sub
 
 
 
 
 
 
 
VB和VC混合编程
 
编号: QA000072
建立日期 : 1998 年 11 月 4 日 最后修改日期: 2001 年 2 月 8 日
所属类别:
吴强 :
    
本人初学 VC5 ,现与几个同事合作开发单位课题( WIN95 应用程序)。我负责数据计算,并将计算结果以图形的方式显示。由于计算的复杂性,也为提高速度,我准备用 VC5 编程,但伙伴们却用 VB5 开发主界面。请指教: 我如何从 VB5 程序中获取数据(数据量很大,且对传输速度要求很高),我又如何接管伙伴用 VB5 生成的窗口,在不开新窗口,不破坏主界面的前提下,将图形输出到视窗的指定位置,并进行一系列的图形操作;我应生成什么类型的文件,伙伴在 VB5 中如何调用我的程序?能否举例说明?
回答 :
     一般来说, VB 和 VC 共同编程有 3 种方式:一种是 VC 生成 DLL ,在 VB 中调用 DLL ;一种是 VC 生成 ActiveX 控件 (.ocx) ,在 VB 中插入;还有一种是在 VC 中生成 ActiveX Automation 服务器,在 VB 中调用。相对而言,第一种方法对 VC 编程者的要求最低,但要求你的伙伴进行配合,我推荐这种方法。
    
先说说 VC++ 的编程。首先在 VC++ 中生成 Win32 DLL 工程。在这个工程中添加几个函数供 VB 用户调用。一个 DLL 中的函数要想被 VB 调用,必须满足两个条件:一是调用方式为 stdcall ,另一个是必须是 export 的。要做到第一条,只须在函数声明前加上 __stdcall 关键字。如 :
    short __stdcall sample(short nLen, short *buffer)
    
要做到第二条,需要在 *.def 文件中加上如下的几行:
    EXPORTS
     sample @1
    
这里的 sample 是你要在 VB 中调用的函数名, @1 表示该函数在 DLL 中的编号,每个函数都不一样。注意这里的函数名是区分大小写的。至于你说的需要传递大量数据,可以这样做,在 VB 中用一个数组存放数据,然后将该数组的大小和地址传给 VC( 至于如何在 VB 中编程我会在下面介绍 ) 。就象上面的例子, nLen 是数组大小, buffer 是数组地址,有了这两条,你可以象使用 VC 的数组一样进行处理了。至于输出图形,可以生成 WMF 或 BMP 格式,让 VB 调用。不过,我认为也可以直接输出到视窗,只要 VB 将窗口的句柄 hWnd 和 hDC 以及视窗的绘图位置 (VB 和 VC 采用的坐标系必须一致才行 ) 传给 VC 就行了。而 VB 的 AutoRedraw 属性必须为 False ,在 Paint 事件中调用 VC 的绘图程序。
    
再谈谈 VB 的编程。 VB 调用 DLL 的方法和调用 Windows API 的方法是一样的,一般在 VB 的书中有介绍。对于上面一个例子,先要声明 VC 函数:
    Declare Function sample Lib "mydll.dll" (ByVal nLen As Integer, buffer As Integer) As Integer
    
这里 mydll.dll 是你的 dll 的名字。你可能已经注意到了两个参数的声明有所不同,第一个参数加上了 ByVal 。规则是这样的:如果在 VC 中某个参数声明为指针和数组,就不加 ByVal ,否则都要加上 ByVal 。在 VB 中调用这个函数采用这样的语法:
    sample 10, a(0)
    
这里的 a() 数组是用来存放数据的, 10 为数组长度,这里的第二个参数不能是 a() ,而必须是要传递的数据中的第一个。这是 VB 编程的关键。
    
下面在说几个可能遇到的问题。一个问题是 VB 可能报告找不到 dll ,你可以把 dll 放到 system 目录下,并确保 VB 的 Declare 语句正确。另一个问题是 VB 报告找不到需要的函数,这通常是因为在 VC 中 *.def 文件没设置。第三种情况是 VB 告诉不能进行转换,这可能是在 VC 中没有加上 __stdcall 关键字,也可能是 VB 和 VC 的参数类型不一致,注意在 VC 中 int 是 4 个字节 ( 相当于 VB 的 Long) ,而 VB 的 Integer 只有 2 个字节。必须保证 VB 和 VC 的参数个数相同,所占字节数也一致。最后一个要注意的问题是 VC 中绝对不能出现数组越界的情况,否则会导致 VB 程序崩溃。
    
总的来说,你和你的伙伴需要一些时间来进行协调和摸索,但这种方法绝对可行,也不难掌握。
    
    
相关问题:
    QA000981 "用VC写的程序中调用用VB写的函数和方法"
    
    
石雨的意见:
    
您回答了在 VB 中调用 DLL 文件中的函数问题,如果我想在 VB 中调用 DLL 文件中所定义的类,那么该如何做呢?拜托!!!
    
答: 如果你说的 DLL 的类是 Automation 方式的,只要在 VB 的 “ 引用 ” 对话框中添加该 DLL 就可以。但是如果该类是在 VC++ 中以 dllexport 形式定义的,则除了 VC++ ,其他语言都无法调用。如果你想让 VB 以 Declare 的方式调用 C++ 的类,你需要改写 DLL 为普通 C 语言函数的形式, DLL 内部可以使用类,但对外的调用接口必须是简单的函数。
    
     spencer yang
的意见:
    
具体范例,请到纪文和网站 VB 入门网
    http://www.vbguide.com.tw/webback.asp
    
看看「个个击破」 单元中的
    ---------------------------------------
    
问题 389 如何解一元二次方程式 (Quadratic Equation of One Variable)
    ---------------------------------------
    1)
请先阅读前言之说明。
    2)
若适合现状者可以下载范例,研究程序写法。
    3)
参考其标示之『参考资料』及『网络资源』。
 
 
 
VB 中调用 DLL 显示 Bad DLL calling convention
编号:
QA001383
 
 
建立日期:
1999 年 7 月 22 日
最后修改日期:
2005 年 8 月 22 日
所属类别:
 
 
     使用的操作系统 :Win95/98
    
使用的编程工具 :VB6 , VC6
    
遇到的问题 : 鉴于 VB 的速度和在位操作方面的不足,我不得不用 VC 来编写一个 DLL 来实现一些功能。可在 VB 中调用是总是说 "Bad DLL calling convention" 。
    
在 VC 中的源程序如下 :( 一个极其简单的试验用的函数 )
    #define DllExport __declspec( dllexport )
    
    DllExport int Gen(int a)
    {
     return 2;
    }
    
    DllExport int Gen2(void)
    {
     return 1;
    }
    
    
在 VB 中声明如下 :
    Declare Function Gen Lib "Paper.dll" (ByVal a As Integer) As Integer
    Declare Function Gen2 Lib "Paper.dll" () As Integer
    
调用程序 :
    
    Dim SS As Integer
     SS = 1
     SS= Gen2() //
调用成功
     SS = Gen(SS) //
一到这就报错 ,?????????(Stone)
 
 
     产生这条错误有几个原因:
    1
、参数声明错误, C 语言的 int 型对应为 VB 的 Long 型。在 VB 中声明如下 :
     Declare Function Gen Lib "Paper.dll" (ByVal a As long) As long
     Declare Function Gen2 Lib "Paper.dll" () As long
    2
、 DLL 中的函数没有使用 stdcall 调用方式。
    VB
的错误信息指的是第二条原因。你定义的调用方式为 __declspec ,而 VB 要求必须是 stdcall 方式,这对没有参数的函数影响不大,但对有参数的函数有影响。你可以参照 QA000072 "VB和VC混合编程" 修改你的 VC 程序。
 
第二 调用中注意
在 VB 定义中注意:
函数如果有返回值定义为 FUNCTION
如果没有返回值定义为 SUB
否则也会报 Bad DLL calling convention 错误
 
一个成功的例子
WordCutDllProject.cpp
// WordCutDllProject.cpp : Defines the initialization routines for the DLL.
//
 
#include "stdafx.h"
#include "WordCutDllProject.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
extern "C" void _stdcall HelloWorld();
 
//
//      Note!
//
//             If this DLL is dynamically linked against the MFC
//             DLLs, any functions exported from this DLL which
//             call into MFC must have the AFX_MANAGE_STATE macro
//             added at the very beginning of the function.
//
//             For example:
//
//             extern "C" BOOL PASCAL EXPORT ExportedFunction()
//             {
//                    AFX_MANAGE_STATE(AfxGetStaticModuleState());
//                    // normal function body here
//             }
//
//             It is very important that this macro appear in each
//             function, prior to any calls into MFC. This means that
//             it must appear as the first statement within the
//             function, even before any object variable declarations
//             as their constructors may generate calls into the MFC
//             DLL.
//
//             Please see MFC Technical Notes 33 and 58 for additional
//             details.
//
 
/////////////////////////////////////////////////////////////////////////////
// CWordCutDllProjectApp
 
BEGIN_MESSAGE_MAP(CWordCutDllProjectApp, CWinApp)
       //{{AFX_MSG_MAP(CWordCutDllProjectApp)
              // NOTE - the ClassWizard will add and remove mapping macros here.
              //    DO NOT EDIT what you see in these blocks of generated code!
       //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CWordCutDllProjectApp construction
 
CWordCutDllProjectApp::CWordCutDllProjectApp()
{
       // TODO: add construction code here,
       // Place all significant initialization in InitInstance
}
 
void __stdcall HelloWorld()
{
       AfxMessageBox("HelloWorld!");
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CWordCutDllProjectApp object
 
CWordCutDllProjectApp theApp;
 
 
WordCutDllProject.def
; WordCutDllProject.def : Declares the module parameters for the DLL.
 
LIBRARY      "WordCutDllProject"
DESCRIPTION 'WordCutDllProject Windows Dynamic Link Library'
 
EXPORTS
    ; Explicit exports can go here
 
       HelloWorld    @1
Vb 代码
Private Declare Sub HelloWorld Lib "D:/VBPROJECT/GeoCodingBatchMatchProject/GeoCodingBatchMatchProject/GeoCodingBatchMatchProject/bin/Debug/WordCutDllProject.dll" ()
 
Private Sub Command1_Click()
    HelloWorld
End Sub
 
 
VB 与 VC 通信初探(二)
【 大 中 小 】【 打印 】【 加入收藏 】【 关闭 】 【 收藏到新浪ViVi 】【 收藏到365KEY 】 浏览字号 :

日期:2005-06-23人气: 560 出处:优快云 作者: eliner

     在通过 DLL 实现 VB 与 VC 的过程中,一般的简单的通信过程很容易建立。在《 VB 与 VC 通信初探(一)》中,我已经把基本的通信过程给描述了一下,但是,有些时候,事件的发展并不总是一帆风顺的,当我们以为可以轻松的实现 VB 与 VC 的通信的时候,就经常发生这样的情况,还是先看看例子再说。
 
VC 中的程序:
extern "C" _declspec(dllexport) bool ReadString(LPCSTR lpString)
 {
        char str[]="Hello World!";
        if(strcmp(lpString,str)==0)
              return true ;
        else
              return false ;
}
 
VB 中的程序:
Private Declare Function ReadString Lib "commication.dll" (ByVal send As String) as Boolean
……………………
Dim result As Boolean
Dim send As String
 
send =”Hello,World!”
 
result = ReadString(send)
 
If result Then
 MsgBox "The return value is 'true'"
Else
 MsgBox "The return value is 'false'"
End If
 
        可以上机运行这个程序,一样的,实现了通信的功能,但是这里有几个地方是应该引起我们注意的,首先就是在 VB 中声明传递的字符串参数的时候,按照常规的理解,好像应该是传递地址才对,但是这里使用的方法是 ByVal ,为什么?原因比较复杂,但是可以简单的来分析一下,在 VB 中,使用的字符串实际上是 BSTR 类型的, 它是由自动化(以前被称为 OLE Automation )定义的数据类型。一个 BSTR 由头部和字符串组成,头部包含了字符串的长度信息,字符串中可以包含嵌入的 null 值。大部分的 BSTR 是 Unicode 的,即每个字符需要两个字节。 BSTR 通常以两字节的两个 null 字符结束。下图表示 了一个 BSTR 类型的字符串。

  (前缀) aTest/0
  头部 BSTR 指向数据的第一个字节

  另一方面,大部分的 DLL 过程(包括 Windows 95 API 中的所有过程)使用 LPSTR 类型字符串,这是指向标准的以 null 结束的 C 语言字符串的指针,它也被称为 ASCIIZ 字符串。 LPSTR 没有前缀。下图显示了一个指向 ASCIIZ 字符串的 LPSTR 。

   aTest/0

   LPSTR 指向一个以 null 结尾的字符串数据的第一个字节

   
通过上面的简单分析,不难看出,如果均以地址的方式传递参数的话,那么 VB 中的字符串将会包含更多德内容,所以,在这里,就必须以值的方式传递参数,虽然是以值得方式传递的参数,但是在 DLL 中还是能够识别得出来这是一个字符串,并且将它转换成为字符串。
 
    好了,上面的这个问题我们已经解决了,但是,我们现在的胃口肯定也变得慢慢得有点大了,既然我们已经实现了能够从 VB 中把字符串传给 DLL ,那么,又应该怎么样才能够从 DLL 中把字符串返回给 VB 程序呢?通过上面的分析我们知道,因为两者之间使用的字符不是相同的格式的,所以简单的传输肯定是不行的,那么应该如何解决呢?其实,在明白了上面我们分析的道理后,再来解决这个问题就太 easy 了,只需要把传回的字符串进行一次转换就可以了,是的,下面就给出这个实例,注意的黑体部分就可以了。
 
VC 中的程序:
extern "C" _declspec(dllexport) BSTR ReadString(LPCSTR lpString)
 {
        char str="Hello ,World!";
        if(strcmp(lpString,str)==0)
                     return SysAllocString((BSTR)str);
        else
               return SysAllocString((BSTR)lpString);
 }
 
VB 中的程序:
Private Declare Function ReadString Lib "commication.dll" (ByVal send As String) as String
……………………
Dim result As String
Dim send As String
 
send =”Hello,World!”
 
result = ReadString(send)
 
MsgBox result
 
为了继续学习下去,我一定会继续完成这一系列的文章,同时也希望可以看到愿意一起学习这方面的知识的朋友给我提意见,与我联系,共同进步!
 
 
第三 VB。NET中程序的退出
触发关闭窗口:
Process.GetCurrentProcess().CloseMainWindow()
当窗口关闭后无法关闭进程,在 MainForm_FormClosed事件中强制关闭进程
       Process.GetCurrentProcess().Close()
        If Not Process.GetCurrentProcess().HasExited Then
            Process.GetCurrentProcess().Kill()
        End If
 
 
第四 关于dll生成的问题
 
在发布打包时一定要用release 方式(不能是debug 模式)生成的dll ,否则在没有vc 开发环境下,运行是有问题的。
 
VB 编译和调用动态链接库dll 文章目录1.环境2.dll编译 1.环境 VS2010 win7 sp1 x64 小插曲,第一次用VB的可以看看下面链接和C差不多。迫于工程需要,我也是第一次用。 主要用法。 定义变量 Dim a as String // 定义一个名为 a 的 String 变量。 与java语言中String a ; 意思一样 定义函数 function(有返回值) Sub(无返回值) Sub 过程 ... 阅读详情

相关推荐

VC 调用 VB 的DLL

在stdafx.h文件中 #import "VB_ADO_DBConnect.dll" using namespace VB_ADO_DBConnect; 先编译一下,会得到2个

rundll64的专栏 1516

VB程序调用C++动态库

注意点如下: VB调用的类型是long,C++库要定义成int。

zhanghuahuapoi的博客 1434

vb 中用vc dll

一般来说,VB和VC共同编程有3种方式:一种是VC生成DLL,在VB中调用DLL;一种是VC生成ActiveX控件(.ocx),在VB中插入;还有一种是在VC中生成ActiveX Automation服务器,在VB中调用。相对而言,第一种方法对VC编程者的要求最低,但要求你的伙伴进行配合,我推荐这种方法。     先说说VC++的编程。首先在VC++中生成Win32 DLL工程。在这个工程中添加几

hoo_flying的专栏 1399

VB制作可输出函数的通用DLL

    大家知道,VB6只能制作ActiveX DLL文件,制作能输出函数的通用DLL文件通常要用到VC等工具。实际上,VB在编译的时候加以控制,经过适当处理也是可以制作通用DLL的。使用VB_DLL_Link程序就可以利用VB编译出通用的DLL文件,此DLL文件可以被其他程序调用,例如在VB中用Declare语句调用并执行DLL中的函数。下面介绍VB_DLL_Link的使用方法:1、安装:本软件

东篱南山的专栏 4936

请问是否可以在vb里调用opencv?

http://www.opencv.org.cn/forum/viewtopic.php?t=2143 OpenCv 里边很多函数以IplImage类型作为参数, VB传递有困难, 建议对OpenCV的函数用自己编写的DLL进行封装一下, 把VB传递 过来的图像数据(byte)传递给自己的dll, 在自己的dll函数头部把数据 格式转化成IplImage, 然后调用Opencv的函数. ...

weixin_30487317的博客 1990

VC客户端调用VB DLL的实践教程

在当今的软件开发领域,不同的编程语言往往以其独特的优点而被应用于不同的场景。比如,Python以其简洁易学的特性广泛应用于数据科学领域,Java则因其跨平台特性而成为企业级应用的首选。然而,在开发过程中,为了满足特定的功能需求、优化性能或是集成现有代码,开发人员常常需要将不同的编程语言结合起来,这就形成了跨语言编程的需求。跨语言编程能够在保持各自语言特性的同时,实现互补和资源共享,从而提升开发效率和软件质量。动态链接库(DLL)是Windows操作系统中一种实现代码复用和模块化程序设计的重要方式。

weixin_28713083的博客 606

一个VB调用VC动态库的例子

VC动态库的接口如下: #ifdef IMSENCRYPT_EXPORTS #define IMSENCRYPT_API __declspec(dllexport) #else #pragma comment(lib, "IMSEncrypt.lib") #define IMSENCRYPT_API __declspec(dllimport) #endif IMSENCRY...

听雨轩 655

VB与VC动态链接库的高效调用与实现

VB(Visual Basic)和VC(Visual C++)是微软公司推出的两个开发工具,它们在编程语言和应用场景方面各有侧重。VB是一种面向对象的编程语言,以其简洁易学的特点著称,主要用于快速开发Windows应用程序。而VC,也就是Visual C++,则更侧重于系统级和性能要求较高的应用开发,支持C和C++语言,提供更深层次的系统控制能力。动态链接库(Dynamic Link Library,简称DLL)是微软Windows操作系统中实现共享函数库的一种方式。

weixin_33608403的博客 819

深入理解动态库

http://www.zahui.com/html/1/1687.htm深入理解动态库     一、动态连接库的用途    动态连接库,dynamic-link libraries(DLL),是微软公司提供的一项软件技术。它实质上是包含了一些函数和数据的可执行模块,它可以被应用程序(.EXE)或其它DLL调用。这种技术有以下好处:共享资源、节省内存、支持多语种、可重复利用、便于大项目的开发等。...

weixin_34260991的博客 84

VB调用VC所写的DLL动态库

本资源含有VB6.0源程序文件及VC6.0源程序文件。实现的是VC下所制作的DLL库给VB调用。非常简单的例子ADD(),省去理解细节,直奔主题,给你一个圆满的解密VB调用VC动态库DLL的答案。一个字爽。

Dofbot机械臂从零部署笔记(1)——ROS之创建URDF模型、配置Moveit和MotionPlanning

Dofbot机械臂从零部署笔记(1)——ROS之创建URDF模型、配置Moveit和MotionPlanning

takedachia的博客 8698

在VB 中调用动态连接库

(出处?好像是天极网)作为一种简单易用的Windows开发环境,Visual Basic从一推出就受到了广大编程人员的欢迎。它使 程序员不必再直接面对纷繁复杂的Windows消息,而可以将精力主要集中在程序功能的实现上,大大提高了编程效率。但凡事有利必有弊。VB中高度的封装和模块化减轻了编程者的负担,同时也使开发人员失去了许多访问低层API函数和直接与Windows交互的机会。因此,相比而言,

lingll's blog 2912

数字电路基础(CMOS电路、低功耗方法)

文章目录一、CMOS器件1.1.CMOS反相器1.2. CMOS与非门1.3.CMOS或非门1.4 CMOS与门和CMOS或门二、CMOS电路参数——功耗 一、CMOS器件 1.1.CMOS反相器 CMOS反相器实现非门功能,由一个PMOS管和一个NMOS管组成,其逻辑电路图如下: 其真值表如下: In PMOS NMOS Out 0 √ 导通 ×关闭 1 1 ×关闭 √...

Mr.翟的博客 1万+

VB如何调用DLL

       Windows动态连接库是包含数据和函数的模块,可以被其它可执行文件(EXE、DLL、OCX 等)调用。动态连接库包含两种函数:输出(exported)函数和内部(internal)函数。输出函数可以被其它模块调用,而内部函数则只能在动态连接库内部使用。尽管动态连接库也能输出 数据,但实际上它的数据通常是只在内部使用的。使用动态连接库的优点是显而易见的。将应用程序的一部分功能提取出来

chenkangli的专栏 3万+

Yocto下载加速秘籍:用清华镜像+PREMIRRORS配置让构建速度翻倍

本文详细解析了如何通过配置Yocto的PREMIRRORS优先级策略,并利用清华大学等国内镜像源,显著加速构建过程中的源码下载。文章提供了具体的配置示例和验证方法,帮助开发者解决网络瓶颈,实现构建速度翻倍,提升开发效率。

game4的博客 276

pyautogui库详细教程,逐行注释(附项目实战:基于图像识别实现崩坏星穹铁道自动化测试)

本文包含了pyautogui的使用方法与常见问题指南,随文附带对游戏实现的自动化项目源码与说明文档

m0_53043024的博客 1万+

在vc中调用vb的dll文件

<br />      假设用vb编写了一个ActiveX 组件,名称为BioxSend,里面生成一个类Test,类里面有一个方法Hello(),并且已经在电脑上注册,下面分别描述怎样在VB和vc中调用。<br />1. VB调用<br />(1) 方法1:直接在project/reference里引用该DLL,然后在使用时声明就可以了,代码如下:<br />dim aa as new Test<br />aa.Hello<br />set aa=nothing<br />(2) 方法2:直接定义为obje

studyandhappy的专栏 1818

共聚焦显微镜的光源、工作原理与选型

共聚焦显微镜作为科研与工业领域中重要的微观成像工具,凭借光源的精准适配性、光学切片技术的三维成像能力,以及对不同工业场景的定制化适配潜力,为半导体检测、工业部件分析、智能制造升级提供了关键技术支撑。深入理解其光源特性、工作原理与选型逻辑,能帮助工程师与技术人员精准匹配设备与生产需求,既保障微观检测的精度与效率,又为产业优化、技术创新筑牢微观观测的基础。

PhotonixBay的博客 1539

VB调用vc写的dll的某个方法时的问题

第一,鉴于VB的速度和在位操作方面的不足,我用VC来编写一个DLL来实现一些功能。输出的函数YUYVtoRGB24 是没有返回值的。故在vb下声明用sub实现。如下,Public Declare Sub YUYVtoRGB24 Lib "ColorSpaceConverter.dll" (ByVal width As Long, ByVal height As Long, ByRef src

Amy0428的专栏 2647

【车载以太网】Eth Stack Bringup

摘要:本文基于AUTOSAR架构,详细介绍了在TC3xx硬件平台上实现EthStack Bringup的全过程。作者通过配置MCAL和Davinci工具,完成了EthTrcv、Eth、EthIf、EthSM和TcpIp等模块的集成,并解决了16字节内存对齐和以太网速率不匹配等问题。最终实现了PC端与开发板的Ping通,并通过WireShark验证了数据包收发。文章总结了调试中的关键问题与解决方案,强调了实践的重要性,为后续EthStack的深入分析奠定了基础。

qq_36056498的博客 182

基于激光雷达与视觉融合的四旋翼无人机室内避障方法研究

本文研究了一种基于激光雷达与视觉融合的四旋翼无人机室内避障方法。针对单一传感器在室内环境中的局限性,提出通过激光雷达提供精确几何距离、视觉相机补充语义信息的融合方案。研究内容包括:搭建ROS硬件平台集成单目相机与2D激光雷达;设计基于扩展卡尔曼滤波的传感器融合模型;改进VFH算法结合视觉深度图进行路径规划。实验验证表明,该方法在复杂室内环境下具有较高的鲁棒性、实时性与避障成功率,为解决无GPS信号环境下的无人机自主导航问题提供了有效方案。

huanghm88的专栏 348

一步一步教你用VC和VB调用C++ DLL

Step by Step: Calling C++ DLLs from VC++ and VB一步一步教你用VC和VB调用C++ DLL.作者 Hans Dietrich    翻译烟灰介绍本系列教程讨论了普通情况下4种使用DLL的方法Part 1从VC++应用程序调用C++ DLL的函数 从VC++应用程序调用C++ DLL的类

──╆的专栏 5130

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB调用DLL

作为一种32位Windows应用程序的开发工具,VB生成的exe文件自然也都是32位的,通常情况下也只能调用32位的动态连接库。但是,并不是所有的32位动态库都能被VB生成的exe 文件正确地识别。 一般来说,自己编写用于VB应用程序调用的动态连接库时,应注意以下几个方面的问题:   1、生成动态库时要使用__stdcall调用约定,而不能使用缺省的__cdecl调用约定;__stdcall 

xusansi521的博客 880

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VB与VC通信初探(一)

     在使用VB调用VC写的DLL的时候,可以实现一些VB不能实现或者很难实现的功能,但是,因为VB与VC之间的数据类型并不总是完全对应的,所以,在进行参数传递的时候,就需要进行类型转换了。下面我将通过逐步的推进的方法,来看看如何达到VB与VC之间的通信。      首先,看一个简单的例子。VC中的程序:extern "C" _declspec(dllexport)

eliner's blog 2305

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

下一篇: 基于虚拟盘的开发环境设置方案
strong_chenfei
博客等级 码龄25年 8粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值