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);
}
//-----------------------------------------------------//
大家是怎样写的,帮帮忙吧,谢谢了
这个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);
}
//-----------------------------------------------------//
大家是怎样写的,帮帮忙吧,谢谢了
然后在模块中声明,如∶
Public Declare Function SendData_W Lib "FV.dll" (ByVal Unit As Integer, ByVal Data As byte)接着,在窗体中调用此函数
Call SendData_W (Unit, Data )
{
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);
}
}