标签: visual-c++-2008

我可以控制分配给互操作程序集的版本号吗?

我有一个使用本机 C++ COM 对象的 C# 程序。Visual Studio 生成一个互操作程序集,其中包含 COM 对象中类型的包装器。每次我重新编译 C# 程序互操作程序集时都有版本 1.0.0.0。

这对安装程序不利 - 有时我们扩展 COM 对象接口(在某些接口的末尾添加新方法),因此必须更改互操作程序集。当安装程序尝试更新现有安装时,它认为互操作程序集没有改变(因为它仍然有 1.0.0.0 版)并跳过更新它并且程序不起作用。

如何控制分配给互操作程序集的版本号?

.net c# versioning interop visual-c++-2008

5
推荐指数
1
解决办法
774
查看次数

Visual C++下dllimport/dllexport及静态库编译

我迫切需要你的帮助。

我尝试使用 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 中找到了这个讨论

如何在 Visual C++ 2008 中链接静态库?

根据这些信息,我查看了库的包含文件(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 …

static poppler dllimport dllexport visual-c++-2008

5
推荐指数
2
解决办法
1万
查看次数

为什么即使设置/ MT选项,我也会看到MSVCR90依赖?

我正在Visual C++ 2008中构建一个DLL,我希望将运行时静态链接到DLL中.所以我进入项目选项并将Runtime Library设置为Multi-threaded (/MT).这在过去一直适用于其他项目.但是当我构建这个时,我仍然最终得到了Dependency Walker在列表中显示MSVCR90.dll.

有人知道是什么原因引起的吗?

c visual-c++-2008 visual-c++

5
推荐指数
1
解决办法
261
查看次数

我可以检查哪些功能模板至少已经实例化了一次?

我有很多模板代码.由于坏的模板代码不会抛出编译器错误,除非它被编译,有什么方法可以检查编译器实际上"编译"哪些模板函数,哪些被完全忽略?

编辑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的完整列表进行比较.

另一个好处是"测试"在模板类中编译哪些方法,该模板类使用类型特征来有选择地编译出某些函数.在继续之前,我想确定我选择正确功能的逻辑是否正确.

c++ templates visual-c++-2008

5
推荐指数
1
解决办法
271
查看次数

如何在Windows中创建任务栏(系统托盘)应用程序

我知道启动Windows应用程序的唯一方法是通过CreateWindow.不幸的是,没有任务栏应用程序的窗口样式,我想知道如何制作一个.我确实在C#中找到了这个解释,但我正在寻找一个能够用VC++ 2008编译的解决方案.任何解决方案?

c++ winapi taskbar system-tray visual-c++-2008

5
推荐指数
1
解决办法
2万
查看次数

MSVC 链接器等效于 --wrap

背景:我在 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 上有这样的可能吗?

c ld visual-c++-2008 visual-c++

5
推荐指数
0
解决办法
989
查看次数

这在VC9的警告级别4没有警告编译.为什么不认为这是编译器缺陷?

我看到一些发布的代码超出范围错误,这让我很奇怪.我希望编译器为此代码生成警告(至少在最高级别)

#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中遗漏的严重错误,(因为自动变量!!!!).任何人都可以给我一个改变主意的严肃理由吗?

c++ visual-c++-2008

4
推荐指数
4
解决办法
634
查看次数

根据VC++编译器版本进行条件编译

我正在将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++预处理器宏.据我所知,您不能在项目设置中使用预处理程序指令.

有谁知道这样做的方法?

migration vc8 visual-studio visual-c++-2008 visual-c++

4
推荐指数
1
解决办法
5337
查看次数

变量周围的堆栈已损坏

我有一个循环函数,直到输入正确的 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)

c++ visual-c++-2008

4
推荐指数
1
解决办法
2万
查看次数

我可以将 VC9 编译的 PHP 与 Apache 一起使用吗?

根据Windows Binaries下载页面http://windows.php.net/download/

不要将 VC9 版本与 apache.org 二进制文件一起使用

这还成立吗?唯一的 VC6 二进制文件适用于 PHP 5.2,我相信 Microsoft 不再支持 VC6?

php apache visual-c++-6 visual-c++-2008

4
推荐指数
1
解决办法
1516
查看次数