powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
18 сообщений из 18, страница 1 из 1
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138817
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или прилинковать ее к C++ проекту, чтобы вызывать скомпилированный VB-код из ресурсов к примеру
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138827
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
Линковать можно, но нужна msvbvm60.lib, которая содержит код, а не импорт.
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138829
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2,

Вот она http://rghost.ru/67vbvSfhh

Попытка прилинковать в лоб, не получилась, ошибки линкера:


Код: vbnet
1.
2.
[VBCompiler]
LinkSwitches= "C:\Test\msvbvm60.lib" /EXPORT:ThunRTMain




авторMicrosoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

Creating library C:\Projects\VB Compilers\Codes\DynamicCal1785148232004\dyncall\Test\Test.lib and object C:\Projects\VB Compilers\Codes\DynamicCal1785148232004\dyncall\Test\Test.exp
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __CIatan already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __CIcos already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __CIexp already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __CIlog already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __CIsin already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __CIsqrt already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __CItan already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaAryDestruct already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaCastObj already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaChkstk already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaErase already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaExceptHandler already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaFPException already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaFreeObj already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaFreeObjList already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaFreeStr already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaFreeVar already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaFreeVarList already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaHresultCheckObj already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaI4Var already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaNew2 already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaObjSet already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaObjSetAddref already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaRedim already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaStrCat already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaStrI4 already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaStrMove already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaVarCopy already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaVarMove already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: ___vbaVarZero already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdiv_m16i already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdiv_m32 already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdiv_m32i already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdiv_m64 already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdiv_r already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdivr_m16i already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdivr_m32 already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdivr_m32i already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fdivr_m64 already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fpatan already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fprem already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fprem1 already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __adj_fptan already defined in Test.OBJ
msvbvm60.lib(msvbvm60.obj) : error LNK2005: __allmul already defined in Test.OBJ
LINK : fatal error LNK1104: cannot open file "LIBC.lib"
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138833
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю, чтобы слинковать приложение нужны зависимости msvbvm60.lib

LIBC.lib

и еще

kernel32.lib
user32.lib
gdi32.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138840
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
Во-первых твоя библиотека не содержит кода. Во-вторых нужно использовать COFF редактор для этого, чтобы можно было удалить секции.
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138842
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2Eolt,
Во-первых твоя библиотека не содержит кода.

все она содержит
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138844
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем в C++ статическая линковка с MSVBVM60.LIB работает. Рантайм размещается внутрь EXE файла


msvbvm60.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#if !defined(D2L_MSVBVM60_SUPP_H__00731812_6062_5441_617B_2D52011374BD__INCLUDED_)
#define D2L_MSVBVM60_SUPP_H__00731812_6062_5441_617B_2D52011374BD__INCLUDED_

#if _MSC_VER > 100 
#pragma once
#endif // _MSC_VER > 1000

#ifdef __cplusplus
extern "C" {
#endif
#include <windows.h>
#include <objbase.h>

	void rtcBeep (void);

#ifdef __cplusplus
}
#endif

#endif // !defined(D2L_MSVBVM60_SUPP_H__00731812_6062_5441_617B_2D52011374BD__INCLUDED_)



msvbvm60.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// msvbvm60.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "msvbvm60.h"

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

int _tmain(int argc, _TCHAR* argv[])
{
	rtcBeep(); // --> Звуковой привет из статического VB-рантайма!!!
	return 0;
}



Размер экзешника начинается примерно от 1500 кбайт. В импорте MSVBVM60.DLL больше нет!
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138847
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EoltATM-TURBO 2Eolt,
Во-первых твоя библиотека не содержит кода.

все она содержит
Я судил по данным программы PEView:

Как видишь она показывает нули. Ну раз либа содержит код - это все меняет. Тогда тебе нужно просто удалить из файла проекта секцию .idata с импортом msvbvm60 и ссылки на нее из файла ИмяПроекта.OBJ и потом линковать свою либу.
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138858
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2Как видишь она показывает нули.

да странно, но пустая .LIB не может же прилинковаться к EXE чтобы он стал размером 1.5 мб?
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138859
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
Видимо просмотрщик глючный.
Проблема откидывания рантайма в том, что VB6 его автоматически подключает (его нельзя удалить в референсах). Поэтому придется вручную удалять эту секцию с импортом.
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138861
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2,

А нужно ли как-то инициализировать рантайм перед вызовом из него функций? Вот пытаюсь вызвать rtcMsgBox из C++
кода. Но происходит краш.

Объявление:
Код: plaintext
1.
2.
3.
4.
5.
	int  rtcMsgBox   (_In_opt_ HWND  hWnd,
	        BSTR    lpText,
                BSTR    lpCaption,
	    _In_     UINT    uType
  );



вызов:
Код: plaintext
1.
2.
3.
4.
5.
int _tmain(int argc, _TCHAR* argv[])
{
    rtcMsgBox(NULL,  L"hello",   L" world",1);
    return 0;
}



То ли объявление неправильное, то ли там на месте rtcMsgBox действительно нули...
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138866
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
Код: vbnet
1.
rtcMsgBox prompt As Variant, buttons As Long, Title As Variant, HelpFile As Variant, Context As Variant


По-моему так. Если не сработает - напиши я тогда глубже копну. Обычно в HelpFile и Context передаются VT_ERROR c DISP_E_PARAMNOTFOUND.
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138867
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати второй параметр передается по значению, другие параметры указатели на Variant переменные.
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138884
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал вызвать функцию Trim$() вроде получилось. Рантайм в MSVBVM60.LIB явно живой.
Теперь надо как-то встроить линковку этой библиотеки во время компиляции VB-проекта.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#include "stdafx.h"
#include "msvbvm60.h"
#include "windows.h"
#pragma comment(lib, "msvbvm60.lib")

int _tmain(int argc, _TCHAR* argv[])
{
   HANDLE hRealHandle = 0;
   BSTR ret;
   DuplicateHandle( GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &hRealHandle,0,TRUE,DUPLICATE_SAME_ACCESS );
   BOOL lib =	MSVBVM60_DllMain((HINSTANCE)hRealHandle,DLL_PROCESS_ATTACH,NULL);
   if (lib==TRUE)
   {
	   //вызов функции Trim из статического VB рантайма
	   ret= rtcTrimBstr(SysAllocString(L"                                  HELLO                              "));
   }
     SysFreeString(ret);
   return 0;
}
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138891
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
Кстати, где ты это либку взял? Нет ли объектных файлов из которых она сделана?
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39138893
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2Eolt,
Кстати, где ты это либку взял? Нет ли объектных файлов из которых она сделана?

пару лет назад скачал с какого-то форума и забыл про нее, а сейчас вот нашел на диске.
Вроде там писали, что она сделана с помощью утилиты которая конвертит Dll в Lib
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39139316
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал слинковать библилотеки MSVBVM60.lib, gdi32.lib, advapi32.lib, oleaut32.lib, ole32.lib, user32.lib, LIBC.LIB
с тестовым VB проектом:

автор "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\gdi32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\advapi32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\oleaut32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\ole32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\user32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.LIB" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\LIBC.LIB" "C:\test\msvbvm60.lib" "C:\test\Form1.OBJ"
"C:\test\Module1.OBJ"
"C:\test\Project1.OBJ" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib" "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VBAEXE6.LIB"
/ENTRY:__vbaS
/OUT:"C:\test\Project1.exe"
/BASE:0x400000
/SUBSYSTEM:WINDOWS,4.0
/VERSION:1.0
/INCREMENTAL:NO
/OPT:REF /MERGE:.rdata=.text
/IGNORE:4078
/DEF:"C:\test\Project1.def"

Линкер ругается что в Project1.obj у уже определены символы. Можно ли это побороть? Project1.obj нельзя же выкинуть совсем.
...
Рейтинг: 0 / 0
Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
    #39139421
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EoltПопробовал слинковать библилотеки MSVBVM60.lib, gdi32.lib, advapi32.lib, oleaut32.lib, ole32.lib, user32.lib, LIBC.LIB
с тестовым VB проектом:

автор "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\gdi32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\advapi32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\oleaut32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\ole32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\user32.lib" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.LIB" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\LIBC.LIB" "C:\test\msvbvm60.lib" "C:\test\Form1.OBJ"
"C:\test\Module1.OBJ"
"C:\test\Project1.OBJ" "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib" "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VBAEXE6.LIB"
/ENTRY:__vbaS
/OUT:"C:\test\Project1.exe"
/BASE:0x400000
/SUBSYSTEM:WINDOWS,4.0
/VERSION:1.0
/INCREMENTAL:NO
/OPT:REF /MERGE:.rdata=.text
/IGNORE:4078
/DEF:"C:\test\Project1.def"

Линкер ругается что в Project1.obj у уже определены символы. Можно ли это побороть? Project1.obj нельзя же выкинуть совсем.
Я же написал:
авторТогда тебе нужно просто удалить из файла проекта секцию .idata с импортом msvbvm60 и ссылки на нее из файла ИмяПроекта.OBJ и потом линковать свою либу.
Тебе нужен COFF редактор. Я его делал, но как помнишь, у меня полетел HDD. Я потихоньку восстанавливаю проект.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Можно ли склинковать экзешник с msvbvm60.lib чтобы убрать рантайм из зависимостей?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]