2010-04-28 116 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