Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
13 / 13 / 9
Регистрация: 06.08.2009
Сообщений: 431
1

При компиляции DLL-проекта не создается DLL-ка

18.10.2014, 16:15. Просмотров 1793. Ответов 3
Метки нет (Все метки)

Добрый день. создал в Visual Studio 2010 проект C+= типа DLL. В файл dllmain.cpp вставил вот такой код:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// test.cpp: определяет экспортированные функции для приложения DLL.
//
 
#include "stdafx.h"
 
#include <windows.h>
#include <process.h>
 
// в случае вызова функций из LUA-кода во внешней DLL
// необходимо определить эти константы до подключения заголовочных файлов LUA
#define LUA_LIB
#define LUA_BUILD_AS_DLL
 
// заголовочные файлы LUA из дистрибутива LUA
extern "C" {
#include "contrib/lauxlib.h"
#include "contrib/lua.h"
}
 
// стандартная точка входа для DLL
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}
 
static int forLua_GetCurrentThreadId(lua_State *L) {
    // возвращаем одно значение, полученное от Win API функции
    lua_pushinteger(L, GetCurrentThreadId());
    return(1);
}
 
static int forLua_SummTwoNumbers(lua_State *L) {
    // получаем первый и второй параметры вызова функции из стека с проверкой каждого на число
    double d1 = luaL_checknumber(L, 1);
    double d2 = luaL_checknumber(L, 2);
 
    // помещаем в стек результат умножения
    lua_pushnumber(L, d1 + d2);
 
    return(1);  // эта функция возвращает одно значение
}
 
// регистрация реализованных в dll функций, чтобы они стали "видимы" для LUA
 
static struct luaL_reg ls_lib[] = {
    {"GetCurrentThreadId", forLua_GetCurrentThreadId},
    {"SummTwoNumbers", forLua_SummTwoNumbers},
    {NULL, NULL}
};
 
extern "C" LUALIB_API int luaopen_luacdll(lua_State *L) {
    luaL_openlib(L, "dllmain", ls_lib, 0);
    return 0;
}
Никаких ошибок не выдает, но в выходном каталоге не появляется файл dllmai.dll (вообще никакая DLL-ка не появляется). Хотя появляется файл dllmain.obj
Подскажите пожалуйста, как лечить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2014, 16:15
Ответы с готовыми решениями:

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете...

Windows I/o без Kernel32.dll и Advapi32.dll
Добрый день. Необходимо в Windows XP SP3 распечатать в стандартный поток &quot;some text here&quot; без...

Ошибка при компиляции: "Access violation at adress 32F7E924 in module 'CC32150MT.DLL'"
При попытке считывания с файла вылетает ошибка. Access violation at adress 32F7E924 in module...

Точка входа в процедуру _dbk_fcall_wraper не найдена в библиотеке DLL BORLNDMM.DLL
При попытке скомпилировать файл выдает такую ошибку Точка входа в процедуру _dbk_fcall_wraper не...

3
Эксперт С++
1659 / 1031 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
18.10.2014, 17:44 2
Насколько помню, "выходной" каталог в VS может назначаться более причудливо, чем хотелось бы. И обычно он не совпадает с тем, куда кладутся .obj-файлы. Так что для начала можно просто тщательнее поискать или более внимательно почитать build log.
0
13 / 13 / 9
Регистрация: 06.08.2009
Сообщений: 431
19.10.2014, 14:51  [ТС] 3
Nick Alte, Спасибо. А где смотреть этот буилд лог? Я наше где указывать выходной каталог, там всякие переменные типа $(OutDir), где они задаться? Указа конкретный путь, без этих переменных, длл-ка появилась в этом каталоге, но стало выходить страшное сообщение:
"Предупреждение 2 warning MSB8012: TargetName(test) не соответствует значению свойства выходного файла (dllmain) для Linker. Это может привести к неправильному построению проекта. Чтобы исправить это, убедитесь, что значения свойств $(OutDir), $(TargetName) и $(TargetExt) соответствуют значению, указанному в %(Link.OutputFile). C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets 992 6 test
" и "
Предупреждение 1 warning MSB8012: TargetPath(D:\Копирайтинг\БКС\Qlua+DLL\Проба\test\Debug\test .dll) не соответствует значению свойства выходного файла (d:\5\dllmain.dll) для Linker. Это может привести к неправильному построению проекта. Чтобы исправить это, убедитесь, что значения свойств $(OutDir), $(TargetName) и $(TargetExt) соответствуют значению, указанному в %(Link.OutputFile). C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets 990 6 test
"
0
Эксперт С++
1659 / 1031 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
19.10.2014, 15:31 4
Всякие там переменные задаются в свойствах проекта. Не по этим страшным именам, конечно, а под более вразумительными названиями. А чтобы предупреждений не было, лучше оставить имя выходного файла как есть.
Логика простая. Есть такая штука, как Workspace, символизирующая собой создаваемый нами программный продукт. Туда может входить несколько проектов (Project), каждый из которых создаёт на выходе ровно один итоговый файл (.exe, .dll или даже .lib). И начиная с одной из версий Visual Studio они начали по умолчанию класть выходные файлы в папки Debug и Release самого Workspace, а не проекта. То есть, если раньше мы получали файл c:\Programs\MyWorkspace\Project1\Debug\project1.exe, теперь имеем c:\Programs\MyWorkspace\Debug\project1.exe
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2014, 15:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как вшить в программу ssleay32.dll и libeay32.dll
Доброе время суток. Для нормальной работы программы на другом компе с https, нужно рядом с прогой...

DLL - как подменить функцию, используя самодельную DLL?
Очень прошу пособить, кому не трудно... . Проблема в целом не сложная: имеется сторонняя программа...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual...

Ошибки при компиляции Dll
Всем привет. При компиляции DLL Visual C++ (VS 2005) выдает ошибки: 1&gt; Creating library...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.