Private Declare Sub SendData_W Lib "FV.dll" (ByVal Unit As Integer, ByVal Data As byte)
这个DLL是TCP协议客户端的向服务器端发送数据:
///////////////////////
FV.h文件如下:
//-----------------------------------------------------------
#include "resource.h"
class CFVApp : public CWinApp
{
public:
CFVApp();
DECLARE_MESSAGE_MAP()
};
//////////////////
class CClientSocket : public CSocket  //定义一个CSocket  类
{
public:
CClientSocket();
virtual ~CClientSocket();
public:
CClientSocket m_CntSocket;
};
//-------------------------------------------------------
extern "C"       
{ void EXPORT _stdcall SendData_W(short Unit, BYTE Data);
}
//-----------------------------------------------------------
////////////////
FV.cpp文件如下:
//-----------------------
#include "stdafx.h"
#include "FV.h"
BEGIN_MESSAGE_MAP(CFVApp, CWinApp)END_MESSAGE_MAP()
///////////////
// CFVApp construction
CClientSocket m_CntSocket;
CFVApp::CFVApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
CClientSocket::CClientSocket()
{}CClientSocket::~CClientSocket()
{
}
/////////////////
// The one and only CFVApp object
CFVApp theApp;BOOL CFVApp::InitInstance()
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
} return TRUE;
}
//------------------------------
extern "C" void EXPORT _stdcall SendData_W(short Unit, BYTE Data)
{
//这里有程序段,要把(Unit,Data)传到服务器上去,不知怎么写??
//在这里不能用m_CntSocket对象啊
//如果这样搞是不行的:
//CClientSocket m_CntSocket;
//m_CntSocket.Close();  
//BOOL bValue=m_CntSocket.Create(0,SOCK_STREAM,NULL); 
//....................
//用上面的方法,在用VB调用时会出错
MessageBox(NULL,"Test","结果",MB_OK);
}
//-----------------------------------------------
//////////完
现要在DLL一运行时打开端口和连上服务器,下面的代码放在哪?有没有象VB里form_load这样的.
m_CntSocket.Close();     
BOOL bValue=m_CntSocket.Create(0,SOCK_STREAM,NULL); 
if(bValue==FALSE)
{
//return;
MessageBox(NULL,"端口打开失败",":(",MB_OK);
}
else
{
Beep(1000,100);                                     
MessageBox(NULL,"端口打开成功","OK",MB_OK);         
}
    bValue=m_CntSocket.Connect("127.0.0.1",502);        
if(bValue==FALSE)
{
//return; 
MessageBox(NULL,"连接失败",":(",MB_OK);
}
else
{
MessageBox(NULL,"连接成功","OK",MB_OK);             
}
//-----------------------------------------------------//
大家是怎样写的,帮帮忙吧,谢谢了

解决方案 »

  1.   

    在DllMain函数里的wReason为DLL_THREAD_ATTACH时写上面代码看看
      

  2.   

    无需特别的写“怎样用VC写能被VB调用的DLL”先把FV.dll放在"C:\WINDOWS\system32"下
    然后在模块中声明,如∶
    Public Declare Function SendData_W Lib "FV.dll" (ByVal Unit As Integer, ByVal Data As byte)接着,在窗体中调用此函数
    Call SendData_W (Unit, Data )
      

  3.   

    BOOL WINAPI DllMain(HANDLE hmodule, DWORD dwReason, PVOID pvReserved)
    {
        switch (dwReason)
        {
        case DLL_PROCESS_ATTACH:
            init();
            break;
        case DLL_THREAD_ATTACH:
            break;
        case DLL_PROCESS_DETACH:
            break;
        case DLL_THREAD_DETACH:
            break;
        }
        return 1;
    }void init(){
    m_CntSocket.Close();     
    BOOL bValue=m_CntSocket.Create(0,SOCK_STREAM,NULL); 
    if(bValue==FALSE)
    {
    //return;
    MessageBox(NULL,"端口打开失败",":(",MB_OK);
    }
    else
    {
    Beep(1000,100);                                     
    MessageBox(NULL,"端口打开成功","OK",MB_OK);         
    }
        bValue=m_CntSocket.Connect("127.0.0.1",502);        
    if(bValue==FALSE)
    {
    //return; 
    MessageBox(NULL,"连接失败",":(",MB_OK);
    }
    else
    {
    MessageBox(NULL,"连接成功","OK",MB_OK);             
    }
    }
      

  4.   

    楼上的有道理,DllMain函数里是不是象C里的main函数一样??