LR 调用 dll 实现,是简单的SOCKET客户端方面的例子,测试了在单用户中可以跑通。
注: 1. 加载lr的lib 和 头文件
2. 把编译好的dll放到lr脚本的目录中
#include <stdio.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
#include "lrs_api.h"
#include "D:/Program Files/include/lrun.h"
void Perror(char *message){
lr_output_message(message);
exit(1);
}
int InitWinsock(){
int Error;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested = MAKEWORD(2,2);
Error = WSAStartup(VersionRequested, &WsaData);
if (Error != 0){
Perror("init socket error");
return -1;
} else {
if(LOBYTE(WsaData.wVersion) != 2 || HIBYTE(WsaData.wHighVersion) != 2){
WSACleanup();
return -1;
}
}
return 1;
}
intCreateSocket(const char *ip,unsigned int port,char *message){
SOCKET sockfd;
struct sockaddr_in from;
sockfd = socket(AF_INET,SOCK_STREAM,0);
from.sin_family = AF_INET;
from.sin_port = htons(port);
from.sin_addr.s_addr = inet_addr(ip);
int len =sizeof (from);
memset(from.sin_zero, 0, 8);
int nCon = connect(sockfd, (struct sockaddr*)& from, sizeof (from));
if (nCon < 0)
Perror("connect socket error");
//for(;;) {
if(message == NULL)
Perror("message can't null");
if(send(sockfd,message,strlen(message),0) != SOCKET_ERROR)
lr_output_message("sending.../n");
if(recv(sockfd,message,strlen(message),0) != SOCKET_ERROR)
lr_output_message("recv from server: %s/n",message);
//}
return 0;
}
void Cleanup() {
//WSADATA WsaData;
//if(LOBYTE(WsaData.wVersion) != 2 || HIBYTE(WsaData.wHghVersion) != 2){
// closesocket(sockfd);
WSACleanup();
return ;
//}
}
把编译好的 DLL 放到脚本目录下或者放到全局环境中就可以在脚本中进行调用了。。
vuser_init()
{
lr_load_dll("sockdll.dll");
InitWinsock();
return 0;
}
Action()
{
int sockfd = CreateSocket("127.0.0.1",3490,"hello,server");
lr_output_message("--%d--",sockfd);
return 0;
}