【发布时间】:2012-02-22 16:09:58
【问题描述】:
我正在开发一个 C# 应用程序并在这里遇到一个奇怪的问题。我有一个用 C++ 构建的 .dll,我必须从 C# 应用程序中调用这个 .dll 中的一些函数。
考虑这个示例代码:
public partial class MainWindows: Window
{
public MainWindow()
{
InitializeComponent();
ConfigurationFunctions.StartMain(); //Start main is the DLL function in C++
int x = ConfigurationFunctions.ReturnIntExp();
StringBuilder sb = ConfigurationOptions.ReturnSomethingExp();
}
}
C++ .cpp 文件
EXPORT_API int xExp;
EXPORT_API char cExp;
EXPORT_API StartMain()
{
//Calculate `x` and `y` in this program values here and allocate to variables to be returned from function
xExp = x;
cExp = c;
}
EXPORT_API int ReturnIntExp()
{
return xExp;
}
EXPORT_API char ReturnSomethingExp()
{
return cExp;
}
问题是当我从 .dll 运行 StartMain() 函数时,它会计算 int 和 char 的一些值,这些值必须分配给变量(实际上返回给 C# 应用程序)
但是,在StartMain() 之后,C# 应用程序应该等到StartMain() 函数完成(在这种情况下大约需要 3-4 秒,并且 dll 本身会触发两个/三个其他进程),然后才能继续进行否则,C# 应用程序中的变量 x 和 sb 将具有空/无意义的值。
在这种情况下我怎样才能达到同样的效果?
【问题讨论】:
-
我没有发现问题。函数
StartMain将一直工作,直到工作完成。工作完成后,C# 应用程序将获得执行控制权并继续调用ReturnIntExp。这里没有问题。
标签: c# c++ visual-c++ c#-4.0