我有一个使用本机 C++ COM 对象的 C# 程序。Visual Studio 生成一个互操作程序集,其中包含 COM 对象中类型的包装器。每次我重新编译 C# 程序互操作程序集时都有版本 1.0.0.0。
这对安装程序不利 - 有时我们扩展 COM 对象接口(在某些接口的末尾添加新方法),因此必须更改互操作程序集。当安装程序尝试更新现有安装时,它认为互操作程序集没有改变(因为它仍然有 1.0.0.0 版)并跳过更新它并且程序不起作用。
如何控制分配给互操作程序集的版本号?
我迫切需要你的帮助。
我尝试使用 Visual C++ 2008 编译器在 Windows 上静态编译 poppler 库(特别是 qt4)。为了完成这个任务,我还需要静态编译一堆其他库作为 poppler 的依赖项。当我最终生成 poppler 的静态版本时,我在构建应用程序时遇到链接错误:
error LNK2019: unresolved external symbol "__declspec(dllimport)...
Run Code Online (Sandbox Code Playgroud)
我已经添加了新的包含路径并链接了 poppler-qt4.lib 但我仍然收到错误。寻找解决方案我在 stackoverflow 中找到了这个讨论
根据这些信息,我查看了库的包含文件(poppler 的依赖项,如 zlib、libpng、cairo 等),我发现在各种情况下,它们没有预处理器指令来指定静态版本图书馆。静态指令示例(openjpeg.h):
#if defined(OPJ_STATIC) || !(defined(_WIN32) || defined(WIN32) || defined(__WIN32__))
# define OPJ_API
# define OPJ_CALLCONV
#else
# define OPJ_CALLCONV __stdcall
# ifdef OPJ_EXPORTS
# define OPJ_API __declspec(dllexport)
# else
# define OPJ_API __declspec(dllimport)
# endif /* OPJ_EXPORTS */
#endif /* !OPJ_STATIC || !WIN32 */
Run Code Online (Sandbox Code Playgroud)
没有静态指令的示例(jpeg lib …
我正在Visual C++ 2008中构建一个DLL,我希望将运行时静态链接到DLL中.所以我进入项目选项并将Runtime Library设置为Multi-threaded (/MT).这在过去一直适用于其他项目.但是当我构建这个时,我仍然最终得到了Dependency Walker在列表中显示MSVCR90.dll.
有人知道是什么原因引起的吗?
我有很多模板代码.由于坏的模板代码不会抛出编译器错误,除非它被编译,有什么方法可以检查编译器实际上"编译"哪些模板函数,哪些被完全忽略?
编辑2:
如果特定的类模板或函数模板被实例化一次,对于任何参数类型,那就没问题.我想要从未以任何形式实例化的函数/类模板列表.
一个特定的例子如下.它们是两个不同的模板函数,我想知道其中一个或两个是否从未实例化.
template <typename T_InputItr, typename T_Distance>
void advance( T_InputItr& aItr, T_Distance aN, bidirectional_iterator_tag )
template <typename T_InputItr, typename T_Distance>
void advance( T_InputItr& aItr, T_Distance aN, random_access_iterator_tag )
Run Code Online (Sandbox Code Playgroud)
编辑:目前,对于类,我在.cpp文件中手动实例化它们,如下所示:
template TClass<int>;
Run Code Online (Sandbox Code Playgroud)
对于我感兴趣的所有类型.这很好,很好.但那就是我记得那样做的.有时我需要编写很多小模板类/函数,我忘记手动实例化一些函数/类模板,然后在后面找出.我想编译器告诉我.
或者,如果我可以获得实例化的函数/类模板列表(对于任何参数),那么我可以将它与我可能在代码中grep的完整列表进行比较.
另一个好处是"测试"在模板类中编译哪些方法,该模板类使用类型特征来有选择地编译出某些函数.在继续之前,我想确定我选择正确功能的逻辑是否正确.
背景:我在 msvc9 上处理一些遗留系统,浮点到 int 转换存在问题。__ftol2_sse如果不为 SSE 编译,它会发出一条指令,该指令是未定义的引用。
抑制这种情况的唯一方法是使用/QIfist执行内联转换的选项,而不调用任何ftol(). 但是,这些内联转换具有不同的舍入算法,因此在与现有代码一起使用时会导致问题。那,他们向 cl.exe stderr 发出不可抑制的“已弃用”警告。
我的解决方法是:
// Declare a regular _ftol() function that is present.
long __cdecl _ftol(double);
// Define _ftol2_sse() to be the regular one.
long __cdecl _ftol2_sse(double f) { return _ftol(f); }
Run Code Online (Sandbox Code Playgroud)
这很好用。但是,某些构建确实已_ftol2_sse定义,在这种情况下,我会得到多个定义,并且很难在代码中弄清楚这一点。
我希望做类似--wrap __ftol2_ssefrom 的事情ld,并覆盖所有构建的行为。在 MSVC 上有这样的可能吗?
我看到一些发布的代码超出范围错误,这让我很奇怪.我希望编译器为此代码生成警告(至少在最高级别)
#pragma warning(push,4)
int main(){
int x[2];
x[2]=0;
return 0;
}
#pragma warning(pop)
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.
EDG编译器很好地说:
"sourceFile.cpp", line 3: warning:
subscript out of range
x[2]=0;
^
Run Code Online (Sandbox Code Playgroud)
实际上EDG说的更多(所有这些都是预期的)
"sourceFile.cpp", line 1: warning:
unrecognized #pragma
#pragma warning(push,4)
^
"sourceFile.cpp", line 4: warning:
subscript out of range
x[2]=0;
^
"sourceFile.cpp", line 3: warning:
variable "x" was set but never used
int x[2];
^
"sourceFile.cpp", line 7: warning:
unrecognized #pragma
#pragma warning(pop)
Run Code Online (Sandbox Code Playgroud)
但这不是我的问题.
我认为这个失败警告VC9中遗漏的严重错误,(因为自动变量!!!!).任何人都可以给我一个改变主意的严肃理由吗?
我正在将VC++项目从Visual Studio 2005(VC8)迁移到Visual Studio 2008(VC9).解决方案中的某些项目在项目设置的"附加库目录"字段中有第三方库的路径.路径看起来像这样:
..\SomeLibrary\Lib\vc9\x86
如果我可以使用Visual Studio的"属性页宏"来替换编译器版本,那将非常有用,就像我可以使用$(ConfigurationName)替换"Debug"或"Release"一样.像下面这样的东西是完美的:
..\SomeLibrary\Lib\$(CompilerVersion)\x86
不幸的是,我找不到合适的宏.
请注意,当我说"宏"时,我指的是Visual Studio的"Property Page Macros",而不是C/C++预处理器宏.据我所知,您不能在项目设置中使用预处理程序指令.
有谁知道这样做的方法?
我有一个循环函数,直到输入正确的 y,n 答案,但在选择结束时出现错误:
Time Check Failure #2 - Stack around the variable 'YESNO' was corrupted.
Run Code Online (Sandbox Code Playgroud)
我在谷歌上看了一下,并不能真正找到这个错误的任何相关答案,我的代码如下:
void Mesh_equations(float a,float b,float c,float d,float e,float f){
char YESNO[1]; //define variables.
int loop=0; //loop set to zero.
while(loop==0){ //while loop initiated whilst loop is equal to zero.
cout <<"\nDo you want to display your coefficients for the mesh equations...(y/n)?";
cin>>YESNO; //prompt and cin.
if ( YESNO[0] == 'Y' || YESNO[0] == 'y'){ //if cin is 'Y' or 'y'
system("CLS");
cout<<"Loop One:\n(" <<a <<")" …Run Code Online (Sandbox Code Playgroud) 根据Windows Binaries下载页面http://windows.php.net/download/
不要将 VC9 版本与 apache.org 二进制文件一起使用
这还成立吗?唯一的 VC6 二进制文件适用于 PHP 5.2,我相信 Microsoft 不再支持 VC6?
visual-c++-2008 ×10
c++ ×4
visual-c++ ×3
c ×2
.net ×1
apache ×1
c# ×1
dllexport ×1
dllimport ×1
interop ×1
ld ×1
migration ×1
php ×1
poppler ×1
static ×1
system-tray ×1
taskbar ×1
templates ×1
vc8 ×1
versioning ×1
visual-c++-6 ×1
winapi ×1