工程--〉设置  或者alt+f7常规 --〉microsoft基础类
然后选择 就ok了

解决方案 »

  1.   

    谢谢楼上两位的热心。to小虾米:你说的那个地方是选择MFC的,我写的是win32,不是MFCto誓将天下了然于胸:你说的“建立这个文件”是指建立什么文件?如果是指开始建立工程的话,建立工程后的向导中只有选择空win32项目、简单win32项目、典型"hello world"win32项目,没有什么选项与编译有关。
      

  2.   

    to小虾米:你说的那个地方是选择MFC的,我写的是win32,不是MFC呵呵,一样的,你试试,你可以选择使用windows静态库不要被使用mfc dll...所迷惑,这个并不是指你的工程是不是mfc
      

  3.   

    呵呵,楼上这位大侠真是有点不负责,您有没有自己试过呢?Win32程序如果设成Use MFC in a Static Library,编译没问题,链接的时候会出一堆错误。没有AfxXXX.h一系列的头文件,是不能用Use MFC in a Static Library的。我也不太清楚这个问题如何解决,你可以先设成工程Release试试,如果不可以的话,只好找找这些dll了,VC里有个叫Depends的小工具,可以很快的完成这个任务。我看了一下,Win32项目只用到了USER32.DLL和KERNEL32.DLL,这个是系统自已就带有的,所以我认为根本就不用拷出来,Win32程序就可以在没有VC的机器上运行。我这没有不带VC的机器,所以没法试,LZ可以自己试一下。当然前提是你没有用别的如GDI+或者D3D这些“高级”玩意儿。
      

  4.   

    呵呵,楼上这位大侠真是有点不负责,您有没有自己试过呢?Win32程序如果设成Use MFC in a Static Library,编译没问题,链接的时候会出一堆错误。没有AfxXXX.h一系列的头文件,是不能用Use MFC in a Static Library的。========================
    呵呵,不是不能,是你不会吧另外,你如果都没用mfc的话,可以选有个windows静态库的选项的
    为什么一定要选mfc 静态呢而且控制台都可以使用mfc吧? 只要你设置得当
      

  5.   

    我早就试过了。在project->settings->general->microsoft foundation classes 里只有三个选项
    not using mfc,use mfc in static library,use mfc in a shared dll,如果选use mfc in static library的话是根本无法正常链接的。
    to草莓猪,既然我要用静态链接,自然是因为要用别的dll啊,我现在就是在用directx9啊.
      

  6.   

    xyxfly(小虾米 (本命年Happy, Day Day Up!)) 呵呵,不是不能,是你不会吧另外,你如果都没用mfc的话,可以选有个windows静态库的选项的
    为什么一定要选mfc 静态呢而且控制台都可以使用mfc吧? 只要你设置得当
    =================================================================================
    我的确不知道如何设置这个windows静态库,不知道应该在哪设置。照你在二楼所说的工程--〉设置  或者alt+f7常规 --〉microsoft基础类没有找到您说的这个"microsoft基础类",VC6和2005我都找了一遍,没看到您说的这个选项。麻烦您再给说清楚些好吗?
      

  7.   

    既然我要用静态链接,自然是因为要用别的dll啊,我现在就是在用directx9啊.这种情况还是打包发行吧
    你用的directx的那些dll你没法静态链接的啊
      

  8.   

    to qqwwing(草莓猪) ( ) 
    =======================================
    vs.net 2003 Use Standard Windows Libraries=======================================
    to Hermisky() ( ) 
    你这种情况打包发行吧,有些是没办法不带上dll的,比如,你自己写个dll。你在程序中使用了这个dll的话,这时当然不可能脱离这个dll而发行你的程序
      

  9.   

    我并不是要说把directx中所有的dll都加在exe里,我只是希望编译出的exe能在别的装有directx的机器上运行,而不需要装directx sdk。但是在动态连接下编译出的exe需要连接directx sdk里的dll,很麻烦。其实我现在只需要知道在vc中如何设置静态链接,在c builder中很简单,在工程属性里有明确的设置,可vc里怎么就找不到呢????????
      

  10.   

    to草莓猪,既然我要用静态链接,自然是因为要用别的dll啊,我现在就是在用directx9啊.
    ------------------------------------------------------------------------------------
    我也在用DirectX,不过我用的MFC,我只能对你说,即使我使用静态链接,在没有装DirectX9 SDK的机器上,它还是会提示你缺少d3d9_XX.dll。注意这里是指SDK,它的DLL比较新,如果你机器里没有装与之相配的的DirectX9(DirectX9本身也有很多版本),程序还是不好用的。
      

  11.   

    我并不是要说把directx中所有的dll都加在exe里,我只是希望编译出的exe能在别的装有directx的机器上运行,而不需要装directx sdk。但是在动态连接下编译出的exe需要连接directx sdk里的dll,很麻烦。没办法的,一定要把那些dll随程序一起打包
      

  12.   

    to xyxfly(小虾米 (本命年Happy, Day Day Up!)) 我的是2005,因为是中文版,所以刚没有注意到。你说的Use Standard Windows Libraries中文版里是使用标准windows库,我认为它对应VC6的就是No Using MFC。它并不是静态链接,如我前面说的,它用的是Windows自带的DLL。编译出来的程序可以直接在没有装VC的机器上用。
      

  13.   

    你搜索一下程序打包发布不用你自己一个一个dll去挑啊,可以自动打包进去的(将需要用到的dll)
      

  14.   

    谢谢楼上诸位,不过DirectX并不是我要讨论的问题。我所需要知道的是在VC里如何静态链接编译。
      

  15.   

    To Hermisky() 我试过了,Win32工作区出来的程序可以直接在别的没有装VC的机子上用。至于D3D的动态链接库,你只能拷出来附着程序一起,其实Depends 这个小工具很好用,而且用到的DLL也不是很多,我把我用到的列出来给你作一个参考
    d3dx9_30.dll
    d3d8thk.dll
    d3d9.dll
    我只用到了这三个,程序就可以在别的机器上运行了。关键是这个d3dx9_30.dll。
    PS:我用的是2006年4月的SDK
      

  16.   

    to 草莓猪谢谢,不过你说的我都知道,我需要知道的是在VC里如何静态链接编译
      

  17.   

    至于别的DLL,我想也是一样的吧。没有用过CBuilder,它的静态链接可以把所有的DLL都合到一个程序中吗?我觉得静态链接的概念是把开发环境中涉及到的类库代码整合到一个程序中,如MS的MFC,Borland的OWL,但第三方提供的DLL,应该是无法合进去的。我自己用到AD采集卡的DLL,试了一下,和D3D一样,即使静态链接,运行时也不能缺少相关DLL。至于Win32工作区下的静态链接,因为用的windows标准DLL,其实它出来的程序已经可以在没有开发环境的机器里使用,那效果不也和静态一样吗。将windows自带的DLL链进去没什么必要吧。以上个人观点。
      

  18.   

    to 草莓猪win32的api当然可以直接在系统上运行,但我说我在win32下写程序,不代表我写的程序里只有win32api,当然会有其他的东西。
    不过这些都不重要。
    我现在只想知道在vc里如何静态链接编译,我只想知道这个而已。
      

  19.   

    你无法静态链接编译Windows自带的动态连接库。Windows API是应用程序编程接口,不是类库。
    你不应该试图发布Windows系统文件。Windows的系统文件保护功能会阻止安装程序替换这样的文件。正确的方法是从微软下载服务包安装程序。
      

  20.   

    我所知道的,在VC里,有静态链接的选项就只是 alt+F7 里的静态链接的MFC库。别的地方应该是没有。我没看到过,还是等等,看看别的大侠有没有更好的答案吧。
      

  21.   

    厄。拜托。。我没说要“静态链接编译Windows自带的动态连接库”,更没说“Windows API是什么类库”。
    我只是想知道 -VC里如何静态链接编译-  , 仅此而已 啊。。我要崩溃了。。
      

  22.   

    我在windows里面编写DX程序的时候
    一般是使用NO USING MFC
    对链接来讲 使用#pragma comment(lib,”d3dx9.lib“)
    据我所致 好像DX的Dll不能被程序集成ps:
    如果可以的话,我们玩游戏就不用有时候需要另外安装DX9.0C了
      

  23.   

    兄弟 win32程序不存在静态编译的 一定是动态链接
    user32.dll gdi32.dll……这类东西不能让您静态连接的。
      

  24.   

    通过菜单中的"工程"->"设置","General"选项卡中"Microsoft Foundation Classes:"下拉选择"Use MFC in a Static Library",这样,就可以设置为使用静态链接库了.
     
    如果选择use MFC in a Shared DLL 的话,你编译后的程序中不包含MFC库,所以文件会比较小,但是如果你的程序直接移到一个没有安装过MFC的机器上时,可能会导致找不到MFC的DLL。
    如果选择Use MFC in a Static Library ,那你编译后的程序就直接包含了调用MFC的部分的库,文件可能会大一些,但是可以直接移到其他机器上运行。
    前者是静态链接,发布不用带MFC的DLL文件。
    后者是动态连接,发布要带MFC得DLL文件。如果可执行文件只有一个,使用前者,执行速度快,但文件比较大。
    如果可执行文件多个,使用后者,因为DLL文件是共享的,所以文件体积总量减少。
    单个文件也小。加载执行块,但运行速度略比前者慢。
    used in a static library:
    使用lib文件。lib是已经编译好的二进制文件,可以与你的工程静态链接起来成为一个exe。
    used in a shared dll:
    使用dll文件,函数实现隐藏在DLL文件内部,你的工程编译成exe文件后,运行时才调用dll 。
     
     
    Debug和Release版本:
     
    他们主要的不同点就在于Debug版本生成的exe中包含很多调试信息,Release版本没包含,并且,Release版本的代码是作了编译优化的. 所以,如果你的一个程序调试完毕可以发布时,请使用release版本生成exe. 当然release版本和debug版本的使用静态连接库要分别设置,如果release版本使用动态库的话,在没装VC的机子一般也运行不了. Release版本和Debug版本的设置方式是一样的.只是在"General"选项卡左边有一个Settings for的下拉,就是选择设置版本的.
      

  25.   

    工程开始时选DLL时选成STATIC就可以了
      

  26.   

    可以尝试着直接使用编译器编译(或写编译脚本), 参考下cl.exe的选项开关说明[http://download.csdn.net/detail/mechstar/3702356]
    如果还是不行的话, ... 那或者是否需要写一个专门的二进制代码连接器来?