2010-04-28 163 views

回答

0

您需要链接到包含您要调用的函数的库,包含定义该函数的头然后调用它。

没有一个更具体的问题,你不会得到更多的。

+0

这里的问题是没有为exe文件生成Lib文件。 我有一个非托管C++ EXE,它的头部(test.h)低于 的#include “stdafx.h中” MyClass类 { 公共: \t INT MYTEST(int数据); }; 和下面是TEST.CPP 的#include “stdafx.h中” 的#include “test.h” INT :: MyClass的MYTEST(int数据) { 返回100; } int main(int argc,char * argv []) {\t \t return 0; } 现在我想从一个托管的c + + dll调用MyTest()函数。 – Maestro 2010-04-28 06:55:03

0

我想你应该看看P/Invoke。使用这种技术,您可以调用从托管函数中导出到DLL或EXE中的任何unmanged函数。

例如: http://www.codeproject.com/KB/cs/essentialpinvoke.aspx

+0

谢谢Andreas的回复。 P \ Invoke对于dll而言不再适用于exe。属性DllImport查找dll。但我有一个exe文件。 我没有得到任何线索如何做到这一点。 – Maestro 2010-04-28 07:32:56

+0

我不认为你可以从另一个EXE exe调用函数.. – Betamoo 2010-04-28 08:58:28

+0

它对exe也很有用。但你说得对,必须从exe文件导出有问题的函数。通常一个exe文件不会导出任何符号。 你有兴趣为exe文件调用一个私有函数吗? – 2010-05-03 10:41:44

0

的托管/非托管是一个红色的鲱鱼。当你想要调用某些代码时,它应该位于lib,DLL或COM exe中。一个普通的双击它运行它不执行任何COM接口的EXE不会将其任何代码暴露给外部调用者。如果你只是想运行它,你可以使用Process.Start来启动整个exe。否则,你将需要重新构建一点(这将涉及到源代码到另一个exe)。通常我把大部分的功能放到一个lib或dll中,让原来的exe调用到这个库中来获得它的工作已完成,并且新的exe也会调用到同一个库中。

由于您使用的是C++/CLI,因此请勿进行COM Interop或P/Invoke。 IJW更容易一些(它正常工作,对吗?)包括标题,链接到lib。完成!但正如你现在所看到的,获取lib可能是第一步。

+0

谢谢凯特。看来我想这样做的方式是不可能的。我现在将重新设计它。 – Maestro 2010-04-28 11:49:52