From 9a70b24d00aa76458c8df970f2840b8fc7f0df14 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 27 Jul 2022 17:05:46 +0800 Subject: [PATCH] =?UTF-8?q?4.1030=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.bat | 126 +++++++++++++++++++++++++------------- build_all.bat | 62 +++++++++++-------- device/scanner.rc | 8 +-- device/scanner.vcxproj | 9 +-- sane/sane.rc | 8 +-- sane/sane.vcxproj | 9 +-- sln/Release/hgsetver.exe | Bin 87040 -> 88576 bytes sln/hgsetver/hgsetver.cpp | 69 ++++++++++++++++++--- twain/brand.h | 6 +- twain/twain.vcxproj | 8 +-- 10 files changed, 203 insertions(+), 102 deletions(-) diff --git a/build.bat b/build.bat index 8a89256..61fe668 100644 --- a/build.bat +++ b/build.bat @@ -1,88 +1,128 @@ echo off -echo "build.bat [hw | lsc] [x86 | x64] [0x100 | 0x...] [onlytwain]" +echo "build.bat [hw | lsc] [x86 | x64] [0x100 | 0x...] [onlytwain] [nov]" set OEM=hg set CPU=x86 set PID=0x100 set COMPILE_RANGE="" +set NOT_INCREASE_VER="" set VAL=%1 -if "%1"=="onlytwain" ( +if "%VAL%"=="onlytwain" ( set COMPILE_RANGE="-only-twain" -) else if "%1"=="hw" ( -set OEM=%1 -)else if "%1"=="lsc" ( -set OEM=%1 +) else if "%VAL%"=="hw" ( +set OEM=%VAL% +)else if "%VAL%"=="lsc" ( +set OEM=%VAL% ) else ( - if "%1"=="x64" ( - set CPU=%1 - ) else if "%1"=="x86" ( - set CPU=%1 + if "%VAL%"=="x64" ( + set CPU=%VAL% + ) else if "%VAL%"=="x86" ( + set CPU=%VAL% ) else if "%VAL:~0,2%"=="0x" ( set PID=%VAL% + ) else if "%VAL%"=="nov" ( + set NOT_INCREASE_VER="-nov" ) ) set VAL=%2 -if "%2"=="onlytwain" ( +if "%VAL%"=="onlytwain" ( set COMPILE_RANGE="-only-twain" -) else if "%2"=="hw" ( -set OEM=%2 -)else if "%2"=="lsc" ( -set OEM=%2 +) else if "%VAL%"=="hw" ( +set OEM=%VAL% +)else if "%VAL%"=="lsc" ( +set OEM=%VAL% ) else ( - if "%2"=="x64" ( - set CPU=%2 - ) else if "%2"=="x86" ( - set CPU=%2 + if "%VAL%"=="x64" ( + set CPU=%VAL% + ) else if "%VAL%"=="x86" ( + set CPU=%VAL% ) else if "%VAL:~0,2%"=="0x" ( set PID=%VAL% + ) else if "%VAL%"=="nov" ( + set NOT_INCREASE_VER="-nov" ) ) set VAL=%3 -if "%3"=="onlytwain" ( +if "%VAL%"=="onlytwain" ( set COMPILE_RANGE="-only-twain" -) else if "%3"=="hw" ( -set OEM=%3 -)else if "%3"=="lsc" ( -set OEM=%3 +) else if "%VAL%"=="hw" ( +set OEM=%VAL% +)else if "%VAL%"=="lsc" ( +set OEM=%VAL% ) else ( - if "%3"=="x64" ( - set CPU=%3 - ) else if "%3"=="x86" ( - set CPU=%3 + if "%VAL%"=="x64" ( + set CPU=%VAL% + ) else if "%VAL%"=="x86" ( + set CPU=%VAL% ) else if "%VAL:~0,2%"=="0x" ( set PID=%VAL% + ) else if "%VAL%"=="nov" ( + set NOT_INCREASE_VER="-nov" ) ) set VAL=%4 -if "%4"=="onlytwain" ( +if "%VAL%"=="onlytwain" ( set COMPILE_RANGE="-only-twain" -) else if "%4"=="hw" ( -set OEM=%4 -)else if "%4"=="lsc" ( -set OEM=%4 +) else if "%VAL%"=="hw" ( +set OEM=%VAL% +)else if "%VAL%"=="lsc" ( +set OEM=%VAL% ) else ( - if "%4"=="x64" ( - set CPU=%4 - ) else if "%4"=="x86" ( - set CPU=%4 + if "%VAL%"=="x64" ( + set CPU=%VAL% + ) else if "%VAL%"=="x86" ( + set CPU=%VAL% ) else if "%VAL:~0,2%"=="0x" ( set PID=%VAL% + ) else if "%VAL%"=="nov" ( + set NOT_INCREASE_VER="-nov" + ) +) + +set VAL=%5 +if "%VAL%"=="onlytwain" ( + set COMPILE_RANGE="-only-twain" +) else if "%VAL%"=="hw" ( +set OEM=%VAL% +)else if "%VAL%"=="lsc" ( +set OEM=%VAL% +) else ( + if "%VAL%"=="x64" ( + set CPU=%VAL% + ) else if "%VAL%"=="x86" ( + set CPU=%VAL% + ) else if "%VAL:~0,2%"=="0x" ( + set PID=%VAL% + ) else if "%VAL%"=="nov" ( + set NOT_INCREASE_VER="-nov" ) ) echo oem=%OEM% echo cpu=%CPU% echo pid=%PID% -set BUILD_CMD="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MSBuild.exe" -"%~dp0\sln\release\hgsetver.exe" "%~dp0\twain\brand.h" -oem %OEM% -cpu %CPU% -pid %PID% %COMPILE_RANGE% -if %COMPILE_RANGE%=="" ( -%BUILD_CMD% "%~dp0\device\scanner.vcxproj" /p:Configuration=Release /p:Platform=x86 -%BUILD_CMD% "%~dp0\sane\sane.vcxproj" /p:Configuration=Release /p:Platform=x86 + +if "%COMPILE_RANGE%"=="" ( +set dev="" +for /f "tokens=1,2,* " %%i in ('reg QUERY "HKEY_CLASSES_ROOT\CLSID\{2E1517DA-87BF-4443-984A-D2BF18F5A908}\LocalServer32" /ve') do set dev=%%k +echo dev=%dev% + +if %dev%=="" ( +echo "Can not find Visual-Studio installing path" +goto end ) -%BUILD_CMD% "%~dp0\twain\twain.vcxproj" /p:Configuration=Release /p:Platform=x86 +call %dev%\..\..\..\vc\auxiliary\build\vcvars32.bat +) + +"%~dp0\sln\release\hgsetver.exe" "%~dp0\twain\brand.h" -oem %OEM% -cpu %CPU% -pid %PID% %COMPILE_RANGE% %NOT_INCREASE_VER% +if %COMPILE_RANGE%=="" ( +MSBuild.exe "%~dp0\device\scanner.vcxproj" /p:Configuration=Release /p:Platform=x86 +MSBuild.exe "%~dp0\sane\sane.vcxproj" /p:Configuration=Release /p:Platform=x86 +) +MSBuild.exe "%~dp0\twain\twain.vcxproj" /p:Configuration=Release /p:Platform=x86 diff --git a/build_all.bat b/build_all.bat index 2b31b88..e423dd6 100644 --- a/build_all.bat +++ b/build_all.bat @@ -1,29 +1,39 @@ echo off -if "%1"=="hw" ( -build.bat hw x86 0x1000 -build.bat hw onlytwain 0x1002 -build.bat hw onlytwain 0x7000 -build.bat hw onlytwain 0x7002 -build.bat hw onlytwain 0x7039 -build.bat hw onlytwain 0x8000 -build.bat hw onlytwain 0x9000 -) else if "%1" == "lsc" ( -build.bat lsc x86 0x8200 -build.bat lsc onlytwain 0x8420 -build.bat lsc onlytwain 0x8429 -build.bat lsc onlytwain 0x8520 -build.bat lsc onlytwain 0x8529 -build.bat lsc onlytwain 0x8620 -build.bat lsc onlytwain 0x8629 -build.bat lsc onlytwain 0x8730 -build.bat lsc onlytwain 0x8739 +set OEM="" +set NOV="" +if "%1"=="nov" ( + set NOV=%1 + set OEM=%2 ) else ( -build.bat x86 0x100 -build.bat onlytwain 0x200 -build.bat onlytwain 0x300 -build.bat onlytwain 0x400 -build.bat onlytwain 0x139 -build.bat onlytwain 0x239 -build.bat onlytwain 0x439 -build.bat onlytwain 0x402 + set OEM=%1 + set NOV=%2 +) + +if "%OEM%"=="hw" ( +build.bat hw x86 0x1000 %NOV% +build.bat hw onlytwain 0x1002 %NOV% +build.bat hw onlytwain 0x7000 %NOV% +build.bat hw onlytwain 0x7002 %NOV% +build.bat hw onlytwain 0x7039 %NOV% +build.bat hw onlytwain 0x8000 %NOV% +build.bat hw onlytwain 0x9000 %NOV% +) else if "%OEM%" == "lsc" ( +build.bat lsc x86 0x8200 %NOV% +build.bat lsc onlytwain 0x8420 %NOV% +build.bat lsc onlytwain 0x8429 %NOV% +build.bat lsc onlytwain 0x8520 %NOV% +build.bat lsc onlytwain 0x8529 %NOV% +build.bat lsc onlytwain 0x8620 %NOV% +build.bat lsc onlytwain 0x8629 %NOV% +build.bat lsc onlytwain 0x8730 %NOV% +build.bat lsc onlytwain 0x8739 %NOV% +) else ( +build.bat x86 0x100 %NOV% +build.bat onlytwain 0x200 %NOV% +build.bat onlytwain 0x300 %NOV% +build.bat onlytwain 0x400 %NOV% +build.bat onlytwain 0x139 %NOV% +build.bat onlytwain 0x239 %NOV% +build.bat onlytwain 0x439 %NOV% +build.bat onlytwain 0x402 %NOV% ) diff --git a/device/scanner.rc b/device/scanner.rc index 3076267..f04662f 100644 --- a/device/scanner.rc +++ b/device/scanner.rc @@ -51,8 +51,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,1026,2022,7261 - PRODUCTVERSION 4,1026,2022,7261 + FILEVERSION 4,1030,2022,7271 + PRODUCTVERSION 4,1030,2022,7271 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -69,12 +69,12 @@ BEGIN BEGIN VALUE "CompanyName", "宁波华高信息科技有限公司" VALUE "FileDescription", "华高扫描仪应用程序" - VALUE "FileVersion", "4.1026.2022.7261" + VALUE "FileVersion", "4.1030.2022.7271" VALUE "InternalName", "scanner.dll" VALUE "LegalCopyright", "Copyright (C) 2022" VALUE "OriginalFilename", "scanner.dll" VALUE "ProductName", "HUAGOScan" - VALUE "ProductVersion", "4.1026.2022.7261" + VALUE "ProductVersion", "4.1030.2022.7271" END END BLOCK "VarFileInfo" diff --git a/device/scanner.vcxproj b/device/scanner.vcxproj index 542ac13..e71fa37 100644 --- a/device/scanner.vcxproj +++ b/device/scanner.vcxproj @@ -75,25 +75,25 @@ $(SolutionDir)..\..\code_device\hgdriver\3rdparty\nick;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\opencv\include\win;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\cyusb\inc\;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\libtiff\include\;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\log4cplus\include\;$(SolutionDir)..\..\code_device\sdk\;$(SolutionDir)..\..\code_device\hgdriver\ImageProcess\;$(SolutionDir)..\..\sdk\include\;$(SolutionDir)..\..\code_device\hgdriver\hgdev\;$(SolutionDir)..\..\code_device\hgdriver\wrapper\;$(ProjectDir);$(SolutionDir)..\..\code_device\hgdriver\3rdparty\tiff\include\;$(IncludePath) $(ProjectDir)lib\$(PlatformTarget)\$(Configuration);$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration);$(LibraryPath) $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ false $(SolutionDir)..\..\code_device\hgdriver\3rdparty\nick;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\opencv\include\win;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\cyusb\inc\;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\libtiff\include\;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\log4cplus\include\;$(SolutionDir)..\..\code_device\sdk\;$(SolutionDir)..\..\code_device\hgdriver\ImageProcess\;$(SolutionDir)..\..\sdk\include\;$(SolutionDir)..\..\code_device\hgdriver\hgdev\;$(SolutionDir)..\..\code_device\hgdriver\wrapper\;$(ProjectDir);$(SolutionDir)..\..\code_device\hgdriver\3rdparty\tiff\include\;$(IncludePath) $(ProjectDir)lib\$(PlatformTarget)\$(Configuration);$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration);$(LibraryPath) $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ true - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ $(SolutionDir)..\..\code_device\hgdriver\3rdparty\nick;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\opencv\include\win;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\cyusb\inc\;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\libtiff\include\;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\log4cplus\include\;$(SolutionDir)..\..\code_device\sdk\;$(SolutionDir)..\..\code_device\hgdriver\ImageProcess\;$(SolutionDir)..\..\sdk\include\;$(SolutionDir)..\..\code_device\hgdriver\hgdev\;$(SolutionDir)..\..\code_device\hgdriver\wrapper\;$(ProjectDir);$(SolutionDir)..\..\code_device\hgdriver\3rdparty\tiff\include\;$(IncludePath) $(ProjectDir)lib\$(PlatformTarget)\$(Configuration);$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration);$(LibraryPath) false - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ $(SolutionDir)..\..\code_device\hgdriver\3rdparty\nick;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\opencv\include\win;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\cyusb\inc\;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\libtiff\include\;$(SolutionDir)..\..\code_device\hgdriver\3rdparty\log4cplus\include\;$(SolutionDir)..\..\code_device\sdk\;$(SolutionDir)..\..\code_device\hgdriver\ImageProcess\;$(SolutionDir)..\..\sdk\include\;$(SolutionDir)..\..\code_device\hgdriver\hgdev\;$(SolutionDir)..\..\code_device\hgdriver\wrapper\;$(ProjectDir);$(SolutionDir)..\..\code_device\hgdriver\3rdparty\tiff\include\;$(IncludePath) $(ProjectDir)lib\$(PlatformTarget)\$(Configuration);$(ProjectDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration);$(LibraryPath) @@ -120,6 +120,7 @@ mkdir $(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration) +copy "$(TargetPath)" "$(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)" move /Y "$(OutDirFullPath)$(ProjectName).exp" "$(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration)" move /Y "$(OutDirFullPath)$(ProjectName).lib" "$(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration)" move /Y "$(OutDirFullPath)$(ProjectName).pdb" "$(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration)" diff --git a/sane/sane.rc b/sane/sane.rc index fd20cdc..10aaee5 100644 --- a/sane/sane.rc +++ b/sane/sane.rc @@ -248,8 +248,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,1026,2022,7261 - PRODUCTVERSION 4,1026,2022,7261 + FILEVERSION 4,1030,2022,7271 + PRODUCTVERSION 4,1030,2022,7271 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -266,12 +266,12 @@ BEGIN BEGIN VALUE "CompanyName", "宁波华高信息科技有限公司" VALUE "FileDescription", "华高扫描仪应用程序" - VALUE "FileVersion", "4.1026.2022.7261" + VALUE "FileVersion", "4.1030.2022.7271" VALUE "InternalName", "sane.dll" VALUE "LegalCopyright", "Copyright (C) 2022" VALUE "OriginalFilename", "sane.dll" VALUE "ProductName", "HUAGOScan" - VALUE "ProductVersion", "4.1026.2022.7261" + VALUE "ProductVersion", "4.1030.2022.7271" END END BLOCK "VarFileInfo" diff --git a/sane/sane.vcxproj b/sane/sane.vcxproj index 39c9a7f..2fde2bf 100644 --- a/sane/sane.vcxproj +++ b/sane/sane.vcxproj @@ -76,25 +76,25 @@ $(SolutionDir)..\..\sdk\include;$(SolutionDir)..\..\code_device\include\;$(IncludePath) $(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\;$(LibraryPath) $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ false $(SolutionDir)..\..\sdk\include;$(SolutionDir)..\..\code_device\include\;$(IncludePath) $(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\;$(LibraryPath) $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ true - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ $(SolutionDir)..\..\sdk\include;$(SolutionDir)..\..\code_device\include\;$(IncludePath) $(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\;$(LibraryPath) false - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ $(SolutionDir)..\..\sdk\include;$(SolutionDir)..\..\code_device\include\;$(IncludePath) $(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\;$(LibraryPath) @@ -116,6 +116,7 @@ mkdir $(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration) +copy "$(TargetPath)" "$(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)" move /Y "$(OutDirFullPath)$(ProjectName).exp" "$(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration)" move /Y "$(OutDirFullPath)$(ProjectName).lib" "$(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration)" move /Y "$(OutDirFullPath)$(ProjectName).pdb" "$(SolutionDir)..\..\sdk\lib\win\$(PlatformTarget)\$(Configuration)" diff --git a/sln/Release/hgsetver.exe b/sln/Release/hgsetver.exe index 2e7a13925d9ee24995ccc7ea153b71012d5a8f57..005bfa8a7fd42c90602b0c7d71b001d1b0824013 100644 GIT binary patch delta 27063 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

Q89G5*;|4d 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 delta 25596 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 [-pid product_id lead with '0x'] [-main main-ver, all version will be omitted if this was not given or be ZERO] [-cpu x86|x64] [-oem hw|lsc] [-only-twain change twain project only]\r\n"; + std::wcout << L"Usage: " << pe.c_str() << L" [-pid product_id lead with '0x'] [-main main-ver, all version will be omitted if this was not given or be ZERO] [-cpu x86|x64] [-oem hw|lsc] [-only-twain change twain project only] [-nov not change version]\r\n"; cmd->release(); DWORD pid = process_util::get_parent_process(GetCurrentProcessId()); @@ -52,9 +52,21 @@ int main() return -1; } + + { + wchar_t* buf = NULL; + int len = 0; + + cmd->to_command_line(buf, &len); + buf = new wchar_t[len + 4]; + cmd->to_command_line(buf, &len); + buf[len] = 0; + std::wcout << buf << std::endl; + delete[] buf; + } oem vendor = OEM_NONE; - bool x86 = true, twain_only = cmd->has(L"-only-twain"); + bool x86 = true, twain_only = cmd->has(L"-only-twain"), nov = cmd->has(L"-nov"); int main = 0, pid = 0x100; if (cmd->parameter(L"-main")) @@ -85,7 +97,7 @@ int main() std::wstring file(cmd->parameter(1)); STR_TO_ABSOLUTE_PATH(file); - set_ver(file.c_str(), vendor, x86, pid, main, twain_only); + set_ver(file.c_str(), vendor, x86, pid, main, twain_only, nov); cmd->release(); return 0; @@ -312,7 +324,10 @@ namespace rc { oem o; int product_id; + bool change_out_dir; }CHGPARAM, *LPCHGPARAM; + bool __stdcall change_out_dir(std::wstring& cont, oem o); + static std::wstring load_file(const wchar_t* file, bom* bm) { std::string cont(""); @@ -778,6 +793,8 @@ namespace rc pos = cont.find(L"OEM_", end); } + change_out_dir(cont, o); + std::string bomstr(""); if (bm == BOM_UNICODE) coding_util::bom::from_unicode(cont.c_str(), cont.length() * 2, got_str, &bomstr); @@ -867,6 +884,34 @@ namespace rc return true; } + bool __stdcall change_out_dir(std::wstring& cont, oem o) + { + bool ok = false; + std::wstring first = L"", last(first), target(L"$(SolutionDir)..\\..\\release\\win\\$(PlatformTarget)\\OEM\\"); + int bgn = 0, end = 0; + + last.insert(1, L"/"); + if (o == OEM_HANWANG) + target += L"hanvon\\"; + else if (o == OEM_LISICHENG) + target += L"lanxum\\"; + else + target += L"huagao\\"; + + while ((bgn = cont.find(first, bgn)) != std::wstring::npos) + { + bgn += first.length(); + end = cont.find(last, bgn); + if (end != std::wstring::npos) + { + ok = true; + cont.replace(bgn, end - bgn, target); + bgn += target.length() + last.length(); + } + } + + return ok; + } bool __stdcall change_output(std::wstring& cont, LPCHGPARAM param) { std::wstring target(L"huagao"), first(L""), last(L""); @@ -893,11 +938,14 @@ namespace rc } } + if (ok && param->change_out_dir) + ok = change_out_dir(cont, param->o); + return ok; } }; -static bool set_ver(const wchar_t* file, oem vendor, bool x86, int pid, int main, bool twain_only) +static bool set_ver(const wchar_t* file, oem vendor, bool x86, int pid, int main, bool twain_only, bool nov) { bool ret = false; bom bm = BOM_UTF8; @@ -925,17 +973,17 @@ static bool set_ver(const wchar_t* file, oem vendor, bool x86, int pid, int main while (change_oem(unic, vendor)) { - if (!twain_only) + if (!nov) { if (main && !change_main(unic, main)) break; if (!change_sub(unic, sub, main)) break; - if (!change_build(unic, build)) - break; - if (!change_patch(unic, patch)) - break; } + if (!change_build(unic, build)) + break; + if (!change_patch(unic, patch)) + break; if (!change_product_id(unic, pid)) break; @@ -1001,6 +1049,7 @@ static bool set_ver(const wchar_t* file, oem vendor, bool x86, int pid, int main rcf = base + L"\\..\\twain\\twain.vcxproj"; STR_SIMPLIFY_PATH(rcf); + param.change_out_dir = !twain_only; if (!rc::change_file(rcf.c_str(), ¶m, rc::change_output)) { std::wcout << "change exporting-definition failed: " << rcf.c_str() << std::endl; diff --git a/twain/brand.h b/twain/brand.h index 2272393..6133be8 100644 --- a/twain/brand.h +++ b/twain/brand.h @@ -6,15 +6,15 @@ #define OEM_NONE #define VERSION_MAIN 4 -#define VERSION_SUB 1026 +#define VERSION_SUB 1030 #define VERSION_BUILD 2022 -#define VERSION_PATCH 7261 +#define VERSION_PATCH 7271 #define TO_STR(a) #a #define TO_VER_STR(vs) TO_STR(v##vs) #define VERSION_STR(a, b, c, d) TO_VER_STR(a.b.c.d) -#define PRODUCT_ID 402 +#define PRODUCT_ID 239 #define MAKE_PID(pid) 0x##pid #define PASTE_DEF(a, b) a##b #define FINAL_STR(a, b, c) TO_STR(a##b##c) diff --git a/twain/twain.vcxproj b/twain/twain.vcxproj index 86c1afc..c44c49e 100644 --- a/twain/twain.vcxproj +++ b/twain/twain.vcxproj @@ -46,18 +46,18 @@ true $(SolutionDir)..\..\sdk\include\;$(IncludePath) - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ $(LibraryPath) - huagaotwain402.ds + huagaotwain239.ds false $(SolutionDir)..\..\sdk\include\;$(IncludePath) - $(SolutionDir)..\..\release\win\$(PlatformTarget)\$(Configuration)\ + $(SolutionDir)..\..\release\win\$(PlatformTarget)\OEM\huagao\ $(SolutionDir)..\..\tmp\$(PlatformTarget)\$(Configuration)\$(ProjectName)\ $(LibraryPath) - huagaotwain402.ds + huagaotwain239.ds