在我正在使用Visual Studio(C++ 2010 Express)构建的C项目中,我使用MatLab引擎允许用户提供在项目中使用的自定义函数.问题是此代码还需要能够在没有安装MatLab的计算机上运行,这意味着在这种情况下计算机上将无法使用所需的DLL.当然,这应该仅在用户不尝试访问调用matlab引擎的代码段时才有效(我已为此提供了一个标志).
我有3个dll是这个场景所需要的.
到目前为止,我已经能够使用LoadLibrary和GetProcAddress在运行时加载libeng.dll .另外两个DLL有点困难,除了调用MatLab引擎的C代码之外,代码也经常被编译为mex文件(MatLab可执行文件),以允许用户从MatLab调用它.当编译为mex文件时,libmx.dll和libmex.dll都由mex编译器动态链接.这意味着使用LoadLibrary和GetProcAddress不适用于这些DLL.
现在我只是将libmx和libmex LIB添加到visual studio中的链接器属性,这样可以正常工作,但对于没有安装MatLab的人来说是不可能的.
我尝试使用delayLoad,如果我在调试模式下编译,这可行,但在我在发布模式下编译时会出现此构建错误.
1>C:\Program Files (x86)\MATLAB\R2012a\bin\win32\libmx.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x2B8
Run Code Online (Sandbox Code Playgroud)
如果没有访问使用它们的代码部分,有没有办法完全跳过查找/加载这些DLL?
这是链接器的命令行:
/OUT:"C:\Users\A.Vandenber\documents\visual studio 2010\Projects\Flash\Release\Flash.exe" /NOLOGO "C:\Program Files (x86)\MATLAB\R2012a\bin\win32\libmx.lib" "C:\Program Files (x86)\MATLAB\R2012a\bin\win32\libmex.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DELAYLOAD:"libmex.dll" /DELAYLOAD:"libmx.dll" /MANIFEST /ManifestFile:"Release\Flash.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\A.Vandenber\documents\visual studio 2010\Projects\Flash\Release\Flash.pdb" /OPT:REF /OPT:ICF /PGD:"C:\Users\A.Vandenber\documents\visual studio …
Run Code Online (Sandbox Code Playgroud) 环境:Windows XP.Visual Studios 2010.语言 - C++.
我遇到了以下链接错误,并且已经没有想法如何解决此问题.我有一个项目(CnD设备),它链接到我的小组控制的2个项目(消息和碳).我试图在3个项目之间搜索项目属性
enter tcp_driver.obj : error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl toString(int)" (?toString@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function "protected: bool __thiscall Tcp_Driver::readMessage(void)" (?readMessage@Tcp_Driver@@IAE_NXZ)
Run Code Online (Sandbox Code Playgroud)
我相信这个问题是因为我没有链接到标准C++库中的字符串.我一遍又一遍地扫描了我的房产清单.以下是我认为对此问题至关重要的一些属性.
CnD设备属性信息:
消息属性信息:
碳属性信息:
我的CnD链接输出是:
1>------ Rebuild …
Run Code Online (Sandbox Code Playgroud) stdstring visual-studio-2010 unresolved-external lnk2019 c++-standard-library
在Visual Studio 2013上遇到,但它可以与任何版本重现.
我从github克隆了协议缓冲库,在它上面运行了CMake-gui(我将所有内容都保留为默认值,因此它是静态版本),只构建libprotobuf(其他项目由于某种原因失败,cmd.exe错误,可能有事情要做有测试,但libprotobuf构建良好).
我的项目使用在mapbox矢量tile规范的github上找到的.proto文件生成的标题.
当我链接时,我首先有这个错误
Error 1 error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' s:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility
我尝试-D_SCL_SECURE_NO_WARNINGS
在其他命令行参数中禁用它,但后来我有其他错误:
Error 1 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in main.obj S:\eiogit3\misc-projs\mapload\mapload\libprotobufd.lib(common.obj)
c++ protocol-buffers visual-studio visual-c++ visual-studio-2013
这基本上与[SO]: C2491: 'std::numpunct<_Elem>::id' : Define of dllimport static data member not allowed [close] 相同,但考虑以下事实:
请不要将其关闭或将其标记为重复项(至少,在没有仔细阅读和理解的情况下)。
主要.cpp:
#include <sstream>
//#define THROW_C2491
#if defined(THROW_C2491)
typedef int CharType;
#else
typedef char CharType;
#endif
int main() {
std::basic_stringstream<CharType> stream;
CharType c = 0x41;
stream << c;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码稍作修改(简化),如果 THROW_C2491
定义则无法编译:
Run Code Online (Sandbox Code Playgroud)xlocnum(294): error C2491: 'std::numpunct<_Elem>::id': definition of dllimport static data member not allowed
输出:
Run Code Online (Sandbox Code Playgroud)xlocnum(294): error C2491: 'std::numpunct<_Elem>::id': definition of …
我遇到了一个非常奇怪的行为,旧的批处理文件在 Windows XP 下运行良好。为什么hello.c
在cmd窗口中通过批处理文件编译(Vs2017 + Win10)下的简单文件时不起作用?
当意识到Win10有新的安全策略时,我在微软网站上阅读了一些文章。他们建议使用开发人员命令行窗口进行命令行编译。
确实,手动操作效果很好。但是当我以超级管理员身份登录Win10并尝试通过批处理文件运行所有内容时,它不起作用,只是完成了环境配置。
手动运行批处理文件中的命令时,一切都按预期工作(成功生成可执行文件)。这有什么问题?
这是批处理文件的内容:
%comspec% /k "C:\Program Files(x86)\Microsoft Visual Studio\2017 \Community\VC\Auxiliary\Build\vcvars64.bat"
cd g:\testdir
g:
cl TestBatFileCompile.c
Run Code Online (Sandbox Code Playgroud) 我写了一个代码,可以从我想要的任何程序中获取 HWND。如果你问的话,这就是我得到 hwnd 的方式。
以下代码应调出设备管理器并将向下箭头发送到程序。
但它确实。它确实会调出设备管理器,但它不会向程序发送向下箭头键,至少没有任何反应。
如果我使用记事本窗口的 hwnd 代码更改 hwndMain 编号,该代码会起作用并发送向下箭头键
import win32api
import win32con
import win32gui
import time
hwndMain = 133082
hwndChild = win32gui.GetWindow(hwndMain, win32con.GW_CHILD)
win32gui.SetForegroundWindow(hwndMain)
time.sleep(1)
win32api.SendMessage(hwndChild, win32con.WM_CHAR, 0x28, 0)
Run Code Online (Sandbox Code Playgroud)
编辑
我试过了
win32api.SendMessage(hwndChild, win32con.WM_CHAR, win32con.WM_KEYDOWN, 0)
Run Code Online (Sandbox Code Playgroud)
代替
win32api.SendMessage(hwndChild, win32con.WM_CHAR, 0x28, 0)
Run Code Online (Sandbox Code Playgroud)
但这也行不通。
我在 python 2.7
我想将循环创建的多个对象(例如图形)直接保存到 zip 文件中,而不将它们保存在目录中。
目前我将这些数字保存在一个文件夹中,然后压缩它们。
import matplotlib.pyplot as plt
from zipfile import ZipFile
for i in range(10):
plt.plot([i, i])
plt.savefig('fig_' + str(i) + '.png')
plt.close()
image_list = []
for file in os.listdir(save_path):
if file.endswith(".png"):
image_list.append(os.path.join(save_path, file))
with ZipFile(os.path.join(save_path, 'export.zip'), 'w') as zip:
for file in image_list:
zip.write(file)
Run Code Online (Sandbox Code Playgroud)
在肯定回答的情况下,有没有办法对任何类型的对象做同样的事情,还是取决于对象类型?
非常感谢
我有两个字典项目和u_items
items = {"A": 1, "B": 2, "C": 3}
u_items = {"D": 4, "B": 4, "E": 8, "C": 4}
Run Code Online (Sandbox Code Playgroud)
我想用u_items更新项目字典,所以我这样做了
items.update((k + '_1' if k in items else k, v) for k, v in u_items.items())
Run Code Online (Sandbox Code Playgroud)
这样我就可以区分两个字典的键
输出:
items = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'B_1': 4, 'E': 8, 'C_1': 4}
Run Code Online (Sandbox Code Playgroud)
但是当我用另一个字典更新项目字典时,假设n_items,它将替换B_1的值而不是使其变为B_1_1
n_items = {"C":7, "B":9}
items.update((k + '_1' if k in items else k, v) for k, v in n_items.items())
Run Code Online (Sandbox Code Playgroud)
输出:
{'A': 1, 'B': …
Run Code Online (Sandbox Code Playgroud) 我目前在Windows 10上有 Python 3.7.4(64 位)和 Python 3.6.6(64 位)这两个版本都在我的系统环境变量(路径)中。
我以前只有3.7,安装了3.6来使用pocketsphinx
,现在我想升级PyAudio
我的3.6。所做的pip install --upgrade pyaudio
就是升级pyaudio
3.7。那么,如何在 Windows 计算机上升级(甚至安装)特定 python 版本的包?
这也是我尝试过的:
python-3.6.6 pip install --upgrade pyaudio
、
python3.6.6 pip install --upgrade pyaudio
和。
是的,这些也许很愚蠢,但我却无可奈何。
python3.6 pip install --upgrade pyaudio
pip3.6.6 install --upgrade pyaudio
编辑1:
我还pip install --upgrade pyaudio
通过在安装Python 3.6的目录中打开它来在power shell中运行,这是(Windows的默认安装目录):C:\Users\--user-name--\AppData\Local\Programs\Python\Python36
例如:
从版本中可以看出,
pip install
仍然会安装 python 3.7 的新软件包
[PyPI]: pywin32 226已于20191110发布。
它适用于大多数Python安装(例如适用于从Python下载的官方版本),但不适用于虚拟环境(例如 使用VirtualEnv ( v16.7.7 )创建,以及(基于进一步研究)Python的venv)。
我使用Python v3.8 .0和v3.7 .3作为实验室老鼠。这是前者的输出:
Run Code Online (Sandbox Code Playgroud)[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058805040]> "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\Scripts\python.exe" -c "import win32api" Fatal Python error: init_import_size: Failed to import the site module Python runtime state: initialized Traceback (most recent call last): File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site.py", line 769, in <module> main() File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site.py", line 746, in main paths_in_sys = addsitepackages(paths_in_sys) File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site.py", line …
python ×5
windows ×4
c++ ×2
python-3.x ×2
pywin32 ×2
visual-c++ ×2
batch-file ×1
c ×1
cmd ×1
dictionary ×1
dll ×1
dllimport ×1
lnk2019 ×1
matlab ×1
matplotlib ×1
python-2.7 ×1
stdstring ×1
virtualenv ×1
zip ×1
zipfile ×1