| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2390 人关注过本帖
标题:在VB中,怎样将VC中DLL里的字符串变量读取出来?? 即:怎样在VB中得到DLL里 ...
取消只看楼主 加入收藏
爱已飘零
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-7-13
结帖率:57.14%
收藏
已结贴  问题点数:10 回复次数:4 
在VB中,怎样将VC中DLL里的字符串变量读取出来?? 即:怎样在VB中得到DLL里的”HELP”这个字符串?
DLL部份代码:
//101901.cpp
#include "stdafx.h"

char str[] = "HELP" ;

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    return TRUE;
}

char*  _stdcall GetChar( )
{
    return str ;
}

VB声明:
Declare Function GetChar Lib "101901.dll" () As String
Vb调用DLL,代码:
Private Sub cmdCommand1_Click()
    Dim str1 As String
    str1 = GetChar()  ‘为什么str1这个字符串是空的呢,我想要的结果str1=”HELP”
    Print str            ‘显示出来是空的,什么都没有。
End Sub
搜索更多相关主题的帖子: 声明 return 字符串 
2011-10-20 11:21
爱已飘零
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-7-13
收藏
得分:0 
回复 2楼 bczgvip
谢谢,但是还是不行啊,提示有类型不匹配。
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-10-20 13:47
爱已飘零
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-7-13
收藏
得分:0 
回复 4楼 bczgvip
非常感谢,可以了。
还有个问题。
但要是DLL中的变量str的字符串是不确定的,在VB中又怎样确定lstrcpyn 这个函数的第三个参数(即字符串的个数)呢?
2011-10-20 17:20
爱已飘零
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-7-13
收藏
得分:0 
回复 6楼 bczgvip
谢谢,可以了。
lstrcpyn str1 , GetChar(),len(str1)‘不过这个函数的第三个参数,应该还要加1,即为len(str1)+1,要不然最后一个字符会丢失。

下次有不懂的地方再请教版主。
2011-10-21 09:47
爱已飘零
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-7-13
收藏
得分:0 
回复 6楼 bczgvip
版主,再请教个关于VB调用C++编写的winsock的DLL的问题。这个是基于UDP通信的。
DLL部份代码如下:
//PmuDll.cpp
struct SendData
{
    BYTE data[12] ;
}SendBuf,*pSendBuf;        //需要发送的数据包和数据包地址的缓存区

struct RecvData
{
    BYTE data[2] ;
}RecvBuf,*pRecvBuf;       //需要接收的数据包和数据包地址的缓存区

SOCKET s ;                    //声明套接字变量  
SOCKADDR_IN addrSock ;        //声明发送或接受数据的地址变量

void UDP_Socket(char *dwIP ,u_short PortNo)
{
    WSADATA wsadata ;                            //库版本的相关信息
    WORD wVersionRequested ;                        //加载的Winsock的版本
    int err ;                                        //用于标志初始化是否成功
wVersionRequested = MAKEWORD(2, 0) ;         //通过MAKEWORD给版本号//的高低位赋值
err = WSAStartup(wVersionRequested ,&wsadata) ;    //WSAStartup函数被用来加载Winsock库,即初始化//Socket环境,若返回0,初始化成功,否则初始化失败
    if(err != 0)
    {
        return ;
    }
    if (LOBYTE(wsadata.wVersion != 2) || HIBYTE(wsadata.wVersion != 0))
    {
        WSACleanup() ;
        MessageBox(NULL ,"版本出错!", "提示" ,MB_OK ) ;    //关闭SOCK环境
        return ;
    }
    s = socket(AF_INET ,SOCK_DGRAM ,0) ;                    //设置SOCKET套字
    if(INVALID_SOCKET == s)
    {
        MessageBox(NULL ,"创建套字失败!", "提示" ,MB_OK || MB_DEFBUTTON1 ) ;
        return ;
    }
    addrSock.sin_addr.S_un.S_addr = inet_addr(dwIP) ;            //IP地址
    addrSock.sin_family = AF_INET ;                            //网络类型
    addrSock.sin_port = htons(PortNo) ;                        //端口
    int len = sizeof(SOCKADDR) ;
    pSendBuf = &SendBuf ;                                    //需要发送数据包的地址
    //发送数据   
    sendto(s ,(char*)pSendBuf ,sizeof(SendData) + 1 ,0 ,(SOCKADDR*)&addrSock ,len) ;
   


//接收数据
    pRecvBuf = &RecvBuf ;
    recvfrom(s ,(char*)pRecvBuf ,sizeof(RecvData) ,0 ,(SOCKADDR*)&addrSock ,&len) ;
    closesocket(s) ;
    WSACleanup() ;
}

在VB中调用PmuDll.DLL时出现了问题,DLL中注释掉接收远程机数据包的函数(recvfrom),程序能够运行,且远程机也能接收到发给它的数据;若不注释掉这个recvfrom函数,VB程序一运行,然后再调用这个UDP_Socke函数,VB程序就卡死掉了。该怎样修改呢??
2011-10-21 13:29
快速回复:在VB中,怎样将VC中DLL里的字符串变量读取出来?? 即:怎样在VB中得到 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.088756 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved