С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
megabax
6 / 6 / 1
Регистрация: 06.08.2009
Сообщений: 233
#1

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

18.10.2014, 16:15. Просмотров 786. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2014, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При компиляции DLL-проекта не создается DLL-ка (C++):

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

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

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

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

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

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

3
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
18.10.2014, 17:44 #2
Насколько помню, "выходной" каталог в VS может назначаться более причудливо, чем хотелось бы. И обычно он не совпадает с тем, куда кладутся .obj-файлы. Так что для начала можно просто тщательнее поискать или более внимательно почитать build log.
0
megabax
6 / 6 / 1
Регистрация: 06.08.2009
Сообщений: 233
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
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
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
19.10.2014, 15:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2014, 15:31
Привет! Вот еще темы с ответами:

Явная загрузка DLL из ДРУГОЙ DLL - C++ Builder
Помогите явно загрузить DLL из исходной DLL Исходная DLL Unit1.h HINSTANCE dllInstance2; typedef int(__import *FType(int)); ...

Вызов функции DLL VB.NET в DLL C++ - C++ Builder
Как вызывать функции dll VB.NET через dll С++, которая приинжекчена к процессу проводника?

Ошибка при компиляции: "fatal error C1108: не удается найти DLL: alink.dll" - C++/CLI WinForms
Доброго времени суток! Програма во время компиляции выдает ошибку: stdafx.cpp : fatal error C1108: не удается найти DLL: alink.dll. Не знаю...

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


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

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

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