Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Можно ли создать TCP-клиент в виде dll-приложения?


Автор: BBulat 10.2.2009, 14:51
TCP-клиент на winsock2 в виде консольного приложения у меня есть и норамльно работает с сервером. Мне необходимо реализовать этот клиент в виде dll приложения. Когда я компилирую dll, компилятор ругается на функции сокета ('WSAStartup' : undeclared identifier и т.п.), хотя хедер winsock2.h я подключил:
Код

// TCP клиент

#include <string.h>
#include <WINSOCK2.H>
#include <stdio.h>
#include <windows.h>
// client_for_LV.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "extcode.h"

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

extern "C" char* _declspec(dllexport) MyMess(char *sMess, int iCount);

char * MyMess(char *sMess, int iCount)
{

  #define PORT 100
  #define SERVERADDR "127.0.0.1"

  //int main(int argc, char* argv[])
  //{
    char buff[1024];
    char buff_1;
    printf("TCP DEMO CLIENT\n");

    // Инициализация библиотек Winsock
    if (WSAStartup(0x202,(WSADATA *)&buff[0]))
    {
      printf("WSAStart error %d\n",WSAGetLastError());
      return -1;
    }
.
.
.



Если поместить подключение winsock2.h внутрь dll-функции, то вылазит след-я ошибка: ...\winsock2.h(70) : error C2598: linkage specification must be at global scope. Ну это я так, на всякий случай сделал)
Как правильно реализовать TCP-клиента в виде dll?
Заранее благодарен!

Автор: BBulat 16.2.2009, 15:24
Извиняюсь за то, что вновь поднимаю тему, но проблемы я не решил. TCP - клиент вообще может работать как dll-приложение?

Автор: SVN74 16.2.2009, 18:30
Цитата(BBulat @  16.2.2009,  15:24 Найти цитируемый пост)
TCP - клиент вообще может работать как dll-приложение? 

Конечно...

Автор: REZiaMIX 16.2.2009, 21:20
Код

#pragma comment(lib,"ws2_32.lib")

Может поможет

Автор: BBulat 18.2.2009, 20:58
Цитата(REZiaMIX @  16.2.2009,  21:20 Найти цитируемый пост)
#pragma comment(lib,"ws2_32.lib")

Компилятор ошибку выдает: error C2598: linkage specification must be at global scope

Автор: Олег2005 18.2.2009, 21:13
Цитата(BBulat @  16.2.2009,  14:24 Найти цитируемый пост)
TCP - клиент вообще может работать как dll-приложение? 

Как это понять - dll-приложение?
Вы можете засунуть в dll функцию, исполняющую роль клиента и экспортировать ее

Compiler Error C2598
linkage specification must be at global scope

The linkage specifier was declared at local scope.
The following is an example of this error:

void func()
{
   extern "C" int func2();   // error, linkage declared in
   .                         //   block at local scope
   .
   .
}

extern "C" int func( int i );  // OK 

Автор: BBulat 18.2.2009, 21:59
Цитата(Олег2005 @ 18.2.2009,  21:13)
Цитата(BBulat @  16.2.2009,  14:24 Найти цитируемый пост)
TCP - клиент вообще может работать как dll-приложение? 

Как это понять - dll-приложение?
Вы можете засунуть в dll функцию, исполняющую роль клиента и экспортировать ее

Compiler Error C2598
linkage specification must be at global scope

The linkage specifier was declared at local scope.
The following is an example of this error:

void func()
{
   extern "C" int func2();   // error, linkage declared in
   .                         //   block at local scope
   .
   .
}

extern "C" int func( int i );  // OK

я это и пытаюсь сделать, но при компилятор ругается на функции сокета, хотя я подклюил инклуд и библиотеку:

#pragma comment(lib,"ws2_32.lib")
#include <WINSOCK2.H>

Автор: connector 24.2.2009, 12:51
Если вместе с winsock2.h была подключена какая-нибудь виндовая библиотека вида win*.h (к примеру windows.h или wininet.h), то придётся отключить эти win*.h.. странно, но тогда эти ошибки(ругается на ф-ции winsock2) исчезают.

Автор: Олег2005 25.2.2009, 00:28
Цитата(connector @  24.2.2009,  11:51 Найти цитируемый пост)
Если вместе с winsock2.h была подключена какая-нибудь виндовая библиотека вида win*.h (к примеру windows.h или wininet.h), то придётся отключить эти win*.h.. странно, но тогда эти ошибки(ругается на ф-ции winsock2) исчезают.

winsock2.h  содержит windows.h - и потому последнюю не надо подключать

Добавлено через 1 минуту и 50 секунд
Цитата(BBulat @  18.2.2009,  20:59 Найти цитируемый пост)
#include <WINSOCK2.H> 

Почему большие буковки?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)