Форум программистов, компьютерный форум CyberForum.ru

Зависание программы при вызове функции из dll - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Преобразование string в char* http://www.cyberforum.ru/cpp-beginners/thread902356.html
функция c_str переделывает стринг строку в const char* , а мне надо чтобы было без const то есть существует ли функция которая переделает стринг строку просто в char* ? подскажите кто знает пожалуйста
C++ Классы C++ Здравствуйте! Хочу обратиться к вам за помощью. Недавно начал изучать С++. Сейчас читаю книгу Дейтелов "Как программировать на C++". Проблема возникла в одном из упражнений главы 3. #include <iostream> #include <string> using namespace std; class Employee { private: http://www.cyberforum.ru/cpp-beginners/thread902355.html
C++ Небольшая задачка
Доброго времени суток. Я не знал в каком разделе создавать эту тему, так что пишу сюда. Есть небольшая проблема не получается решить две небольшие задачки в Microsoft Visual Studio 2010. Буду очень благодарен за помощь :) одна тема - одна задача, текстовые задания перепечатываем на форум,
Дан целочисленный одномерный массив А, состоящий из 14 элементов. вычислить и напечатать сумму парши элементов C++
дано целочисленный одномерный массив А, состоящий из 14 элементов. вычислить и напечатать сумму парши элементов, на нечетных местах и их килкисть (цикл Постусловия) !!!!!!!!!!!!!!!!!!!!!!!!
C++ Даны две целочисленные матрицы 4-го порядка. Получить новую * матрицу путем вычитания из элементов каждого столбца первой матрицы http://www.cyberforum.ru/cpp-beginners/thread902336.html
даны две целочисленные матрицы 4-го порядка. Получить новую матрицу путем вычитания из элементов каждого столбца первой матрицы сумму элементов соответствующих строк второй матрицы1!!!!!!!!!!!!!
C++ вычислить сумму всех эллементов двумерного макссива вычислить сумму всех эллементов двумерного макссива стоящих на главной диагонали. подробнее

Показать сообщение отдельно
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
15.06.2013, 11:46     Зависание программы при вызове функции из dll
Есть простая программа для выполнения http запросов и получения ответов. Программа работает как надо:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <curl/curl.h>
#pragma comment(lib,"curllib.lib")
 
int main(int argc, char *argv[])
{
    CURL *curl_handle;
    CURLcode res;
 
    curl_handle = curl_easy_init();
    if(curl_handle)
        {
             curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.google.ru"); // задаем  url адрес
             res = curl_easy_perform(curl_handle); // выполняем запрос
             curl_easy_cleanup(curl_handle); // закрываем дескриптор curl
        }
    getchar();
    return 0;
}
После запуска программы я получаю код главной страницы гугл в консоле.

Я перевел эту программу в dll

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <curl/curl.h>
#pragma comment(lib,"curllib.lib")
 
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
        CURL *curl_handle;
        CURLcode res;
 
        curl_handle = curl_easy_init();
        if(curl_handle)
        {
                 curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.google.ru");
                 printf("point 1");
                 res = curl_easy_perform(curl_handle); //Программа зависает
                 printf("point 2");
                 curl_easy_cleanup(curl_handle);
        }
        getchar();
 
        switch (ul_reason_for_call)
        {
                case DLL_PROCESS_ATTACH:
                break;
                case DLL_PROCESS_DETACH:
                break;
        }
        return TRUE;
}
При загрузке библиотеки выполняется этот код. На экран выводится "point 1", после чего программа зависает навсегда.

Для загрузки библиотеки использую такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
#include <windows.h>
 
using namespace std;
typedef unsigned __int64 ulong64;
 
typedef int (*ph_dct_imagehash)(const char* file,ulong64 &hash);
 
int _tmain(int argc, _TCHAR* argv[])
{
    ph_dct_imagehash _ph_dct_imagehash;
    HINSTANCE hInstLibrary = LoadLibrary(L"dlltest.dll");
 
   if (hInstLibrary)
   {
      std::cout << "Ok!" <<  std::endl;
 
 
      FreeLibrary(hInstLibrary);
   }
   else
   {
      std::cout << "DLL Failed To Load!" <<  std::endl;
      std::cout << GetLastError() <<  std::endl;
   }
 
   std::cin.get();
 
   return 0;
}
Проект exe файла для запуска dll http://rghost.ru/46766786 (для vc2010)
Проект dll http://rghost.ru/46766821 (для vc2010)

При "переделывании" проекта из exe в dll в настройках только меняю тип конфигурации и выходное расширение на dll, ну и соответственно меняю сам код программы. На лишние строки в коде не обращайте внимания, старался порезать всё лишнее.
Собственно вопрос - что нужно еще указывать в настройках чтоб dll работал как exe, не зависая на подобных строчках?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru