“黄沙中,飞舞着我们的先王,他们在空中俯视着子民们对蓝色的向往。” 火之章 霜之章 [最新更新:9月15日]

你在这里看到的是一位.NET程序员的执着及其信仰的效率世界观。我们行走在消逝中,但我们都有希望,都有传承。

引用标准C函数库时发生“无效的库格式 已忽略库”的解决方案 ,2008-11-05,0条评论

这个问题发生得非常蹊跷,从前测试好的两个范例文件(当时记录得明明白白,绝对没有错误),简单得不能再简单的例子,测试两个int相加等于多少,封装成dll,然后在别的程序中引用。今天终于要用到这种解决方案了,于是照猫画虎,第一遍编译运行,成功。第二遍编译运行失败,提示“无效的库格式 已忽略库”,其中唯一的修改只是把函数名从test修改成render,居然有这种低级错误?那就不改了,再把函数名换回去吧。我日!换回去也不行了。


反复把问题最简单化,反复建立了不小于10个项目,就还差没重装系统了。得出结论:

#pragma comment(lib,"xxxxxx.lib")

出现错误的时候,只要把这句话中的"xxxxxx.lib"修改一下,随便修改成一个不存在的文件名称,编译,等着它提示找不到该文件,然后再把文件名换回正确的名字,问题解决。

看来这确实是低级错误,是微软犯的老毛病了,相似的错误在IE中也存在,都是由于缓存引起的,IE中可以通过删除缓存来解决,但是VisualStudio中我还真不知道该删哪个文件,就这样子以毒攻毒也可以,反正也不是什么高深的技术。

错误发生在VisualStudio 2005,C++环境,win32开发。

另一方面,如果是在.NET中加载WIN32的C函数DLL,则不会发生上面所说的问题。从现在计算机的性能来衡量的话,我们完全可以使用.NET来开发一些对性能要求不高或者影响不大的部分,例如显示界面,数据库连接,字符串操作,网络传输等,这些都是.NET的强项,然后把剩下的高性能计算交给传统C++来运行,通过P/Invoke来结合二者,既方便了开发,也不损失多少性能代价。
mcts

Category

Tag

Archives

  • kvspas
  • Powered by Google App Engine