vs平台倒闭了吗没创过的三位号码还没有。

14:28 提问
为什么VS2010无法创建VC++项目,其他项目可以创建,急急急!!!
win7旗舰版安装的VS2010无法创建VC++的项目,但是其他语言的都可以创建项目,请问这是什么原因?
提示错误:
平台根目录“C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms”不存在。
可是文件目录存在啊!!!
为什么???
按赞数排序
可能是和某些软件冲突吧,我用的是08没有什么问题,记得以前vc6.0和office冲突过,不过08没出现过问题
其他相似问题三位公主vs三位王子
Copyright (C)
All Rights Reserved 中文在线版权所有,
等在线小说阅读网站,未经许可不得擅自转载本站内容。
 京ICP备号-5 
 北京市公安局备案号码:1217k小说网所收录
作品、社区话题、
评论、用户上传文字、图片等其他一切内容及17k
网所做之广告均属用户个人行为,与17k解决vs2013下创建的python文件,到其他平台(如linux)下中文乱码(或运行时报SyntaxError: (unicode error) 'utf-8' codec can't decode byte...)
时间: 13:53:57
&&&& 阅读:395
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&Vs2013中创建python文件,在文件中没输入中文时,编码为utf-8的,如图
接着,在里面输入几行中文后,再次用notepad++查看其编码如下,在vs下运行也报错(用cmd运行就不会):
根据以有经验,这是字符编码的问题了,试着将python文件的转化为utf-8的,直接在notepad++上转utf-8&无bom编码格式的,保存,打开vs,会有以下提示
这里不要选择no吧,不然可能会提示以下类似的错误
如果有提示,直接关闭,不然的话,vs又会将此文件保存为ascii格式了
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/shanql/p/5306002.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!&&&&& Qt拥有强大的跨平台开发Gui的功能,VS2008集成环境能够提供强大的调试编译能力,所以很多时候我们都在Visual Studio2008的条件下将Qt作为插件集成到VS的开发环境对其进行开发。
  平台搭建:1、安装VS2008到指定路径下
       2、下载window环境下Qt的资源包,我所使用的版本是
阅读(...) 评论()在VS2010平台上创建并使用dll -
- ITeye技术网站
博客分类:
代码的复用:
1.源码级别的复用:优点可以阅读和修改相关的内容,更加灵活。缺点可控性不好,容易增加代码级别的耦合,内存开支较大,升级和维护比较麻烦。
2.二进制级别的复用:优点就是上面的缺点,缺点就是上面的优点。lib和dll都是二进制级别的重用。
创建dll工程:
通过Start Page或者File菜单栏,新建一个Project,将会弹出新建项目对话框。选择Win32 Project向导,项目名称为CreateDLL,解决方案名为DLLTEST(注意Create directories for solution是勾选上的),点击OK,接着点击Next,到Application Settings,选择应用程序类型为dll,并勾选“Export Symbols”(选择后工程会生成一些可用代码),点击Finish。完成这一步之后,VS界面上左边的Solution Explorer中将会看到向导自动生成的文件列表,如图1所示。
图1 向导自动生成的文件列表
1.CreateDLL.h:
#ifdef WIN32DLL_EXPORTS
#define WIN32DLL_API __declspec(dllexport)
#define WIN32DLL_API __declspec(dllimport)
// This class is exported from the win32dll.dll
class WIN32DLL_API Cwin32dll {
Cwin32dll(void);
// TODO: add your methods here.
extern WIN32DLL_API int nwin32
WIN32DLL_API int fnwin32dll(void);
2.CreateDLL.cpp:
// This is an example of an exported variable
WIN32DLL_API int nwin32dll=0;
// This is an example of an exported function.
WIN32DLL_API int fnwin32dll(void)
return 42;
接下来,选择菜单Build-&Build CreateDLL,Output窗口提示CreateDLL.dll文件生成成功,如图2所示。
本例采用“显式调用”的方式使用CreateDLL.dll。显式调用方式相比于”隐式调用“有好有坏。显式调用只需要一个.dll文件就可以了,灵活性更好,更新模块方便;相对的,程序员需要做的事情更多,使用方法更为复杂。
右键单击Solution Explorer中的Solution 'DLLTEST',在弹出的菜单中选择Add-&New Project,选择Win32 Console Application,输入项目名为UseDLL,点击OK,接着点击Next,在Application Settings界面勾选EmptyProject并点击Finish。右键单击项目UseDLL,给它添加源文件UseDLL.cpp。这样操作之后,Solution Explorer的信息如图3所示。
图3 向Solution'DLLTEST'添加项目UseDLL
编写UseDLL.cpp的代码为:
#include&Windows.h&
#include&iostream&
typedef void(*FUNA)(int&,int&);
typedef void(*FUNB)(int&,int&,int&);
int main()
const char* dllName="CreateDLL.dll";
const char* funName1="printMax";
const char* funName2="printMax";
int x(100),y(100),z(100);
HMODULE hDLL=LoadLibrary(dllName);
if(hDLL!=NULL)
FUNA fp1=FUNA(GetProcAddress(hDLL,funName1));
if(fp1!=NULL)
std::cout&&"Input 2 Numbers:";
std::cin&&x&&y;
std::cout&&"Cannot Find Function "&&funName1&&std::
FUNB fp2=FUNB(GetProcAddress(hDLL,funName2));
if(fp2!=NULL)
std::cout&&"Input 3 Numbers:";
std::cin&&x&&y&&z;
fp2(x,y,z);
std::cout&&"Cannot Find Function "&&funName2&&std::
FreeLibrary(hDLL);
std::cout&&"Cannot Find "&&dllName&&std::
system("pause");
代码比较长,但是并不难理解,这里仅说明代码中的一些要点。
包含头文件Windows.h,原因在于程序中用到了LoadLibrary、FreeLibrary、GetProcAddress等Win32 API函数。
FUNA和FUNB是函数指针类型的声明。
当程序不再使用dll时,应该调用FreeLibrary及时释放它占用的内存空间。
如果在const char* dllName和funName底部出现红色波浪线提示,说明采用的字符集不匹配,需要修改项目UseDLL的属性CharaterSet为Not Set。
为方便项目的调试,建议修改解决方案的Startup Project属性为Single startup project并以UseDLL为首选。
然而,这个程序还有错误。编译并运行,结果如图4所示。
图4 UseDLL的运行结果
这并不是期望中的结果。实际上,正如第二节提到的那样,造成这种错误的原因正是导出函数的修饰名称。虽然在CreateDLL.cpp中两个printMax函数有相同的名称,但在dll二进制文件中,经过编译器的“加工”,它们实际上各自有不同的名称了。这也是函数重载机制得以实现的一个技术支持。
使用VS2010附带工具dumpbin,查看CreateDLL.dll的导出函数名,结果如图5所示。
图5 查看CreateDLL.dll的导出函数名
观察图5可以发现,CreateDLL.dll导出函数名为?printMax@@YAXAAH00@Z和?printMax@@YAXAAH0@Z。它们分别对应着3个整数的printMax和两个整数的printMax。因此,Use.DLL中funName应当相应修改为:
const char* funName1="?printMax@@YAXAAH0@Z";
const char* funName2=“?printMax@@YAXAAH00@Z”;
修改之后,再次编译运行,结果正确,如图6所示。
图6 UseDLL正常运行
dll导出函数名称规范化
创建、使用dll并不复杂,走过前三节,相信读者肯定有这样的体会。然而,一个问题仍然值得思考:导出函数的修饰名称太“奇怪”,为dll的使用带来了不便,能不能让导出函数的修饰名称规范一些?
答案是肯定的,而且方法至少有两种:一是运用extern "C"修饰printMax;二是运用模块定义文件.def。后者的效果更好,所以本节将使用.def来规范化导出函数的修饰名称。
CreateDLL.dll导出的两个函数功能很简单,根据功能描述,理想的函数名称是pMaxA2和pMaxA3。在CreateDLL项目中添加CreateDLL.def文件:
LIBRARY CreateDLL
pMaxA2=?printMax@@YAXAAH0@Z
pMaxA3=?printMax@@YAXAAH00@Z
重新build项目CreateDLL,使用dumpbin再次查看CreateDLL.dll的导出函数名称,结果如图7所示。
图7 规范化的函数名,奇怪的修饰名称还存在
出现了期望的结果,但仍然有小缺憾:奇怪的修饰名称仍然存在。能否去掉这些不太规范的修饰名称呢?当然是可以的。只需要将CreateDLL.h中#define CREATEDLL_API __declspec(dllexport) 修改为#define CREATEDLL_API即可。修改之后重新编译生成CreateDLL.dll,使用dumpbin查看导出函数名称,结果如图8所示。
图8 规范化的函数名,去除了奇怪的修饰名称
回到UseDLL.cpp,修改funName:
const char* funName1="pMaxA2";
const char* funName2="pMaxA3";
重新编译运行UseDLL,结果正确,与图6类似。
dll的不足:
动态链接库虽然一定程度上实现了“黑盒复用”,但仍然存在着诸多不足,笔者能够想到的有下面几点。
dll节省了编译期的时间,但相应延长了运行期的时间,因为在使用dll的导出函数时,不但要加载dll,而且程序将会在模块间跳转,降低了cache的命中率。
若采用隐式调用,仍然需要.h、.lib、.dll文件(“三件套”),并不能有效支持模块的更新。
显式调用虽然很好地支持模块的更新,但却不能导出类和变量。
dll不支持Template。
二进制级别的代码复用相比源码级别的复用已经有了很大的进步,但在二进制级别的代码复用中,dll显得太古老。想真正完美实现跨平台、跨语言的黑盒复用,采用COM才是正确的选择。
浏览: 164178 次
来自: 广州
好可惜,你写的文章很有帮助,谢谢!
xj1990129 写道PackageFragmentRoot ...

我要回帖

更多关于 vs平台官方下载 的文章

 

随机推荐