帮助解决从dll中导入函数的问题 - 页 4

 
关于Eche文件的建议不错。当然,你是对的,它们应该被检查。我只是想听听你的意见,是否值得关注它们,即检查它们。 但从描述来看,我认为这就是我们谈论的内容,你怎么看? 我对实用的C++还不是很在行,我用大脑理解,写这些转换器没有什么全球复杂的东西,但目前对我来说还是有点复杂,因此我想尽可能简单地解决它,特别是如果有现成的函数...
 

相信但要核实 :-)。这就对了。

 

我想知道如何在C++ Builder中做一个实现。据我所知,要制作一个EXE文件,你必须连续调用WinMain函数中的三个函数

ConvertData_1 (...)。

rmatrixsvd(...)。

ConvertData_2(...)。

对吗?在形成DLL时,我们应该做什么?以同样的方式?我有一些疑虑...我试图使用Arkhangelsky的一本书 "Programming in C++ Builder"...

但到目前为止,没有任何效果......

 

你在Exe或Dll中工作没有区别。

.

从这个主题的第二页复制了我的帖子。

-----------------------------------------------------------

你应该像这样声明一个函数
外部 "C" bool __declspec(dllexport) __stdcall RMatrixSVD_DLL_ADAPTER(double * in1, double * in2, double * out)
// 在这里,你当然要传递行和列的数量。
{
//将输入参数转换为ap::real_2d_array。
ap::real_2d_array a1 = convertPDoubleToReal2DArray(in1)。
ap::real_2d_array a2 = ;
.
//计算
ap::real_2d_array a3;
rmatrixsvd(a1, a2, a3)。
.
//将a3的结果翻译成out
convertReal2DArrayToPDouble(a3, out);
.
返回。
}

-----------------------------------------------------------

.

WinMain函数与此有什么关系?这算是该计划的入门点...

当然,我很抱歉,但你明白什么是功能 吗?

.

说实话,从9月2日至6日,你已经在这项任务上花了多少时间?

要求专家提供2小时的咨询(代码准备+解释)不是更好吗?

 

谢谢,我现在明白了...所有这些功能都是由一个外部的框架,这也是我要导出的东西。对不起,有点糊涂了......

关于专家,我很想...如果附近有一个。但是,不幸的是,没有,这当然是一种遗憾......

这里是哈萨克斯坦...虽然在阿拉木图和阿斯塔纳可能有很好的专家,但我不能去找他们:-),超过1000公里远。

这就是为什么我必须自己去想办法。是的,我已经浪费了很多时间:-)。好吧,别介意......。莫斯科也不是在一天之内建成的。:-) 正如他们所说。

 

我不太了解Visual Studio 2010...现在只有Beta版吗?据我所知,目前还没有发布?

视觉辅助系统是否单独提供?

Visual Studio 2008的倒数第二个版本呢?

 

严格说来,你从2005年起就够了。或2003年。

Visual Assist是一个第三方工具。

 

当然,对于手头的任务,这些已经足够了。但我想保持清醒的头脑。我认为这项任务不会是最后一项...

但是Visual Studio 2009似乎没有出现,所以我问你最新的可用版本...

为了研究......所以要研究到最顶端...:-)

 

终于有东西诞生了...:-)

但在编译过程中出现了一些问题,如果你指定该函数是可导出的...

如果你指定。

1.) int SVD_DLL(double inA[], double outW[], double outU[], double outVT[], int Row, int Col), 编译没有错误

2) extern "C" int __declspec(dllexport) __stdcall SVD_DLL(double inA[], double outW[], double outU[], double outVT[], int Row, int Col) ,则有错误。

[ILINK32 Error] 错误:从\COMP-BSN/MY DOCUMENTS\!ALGORITMS\SVD\SVD_DLL\2009.09.07\PROJECT\DEBUG_BUILD\U_SVD_DLL.OBJ引用了未解决的外部'ap::afree(void *)' 。
[ILINK32 Error] 错误:从\COMP-BSN!ALGORITMS\SVD\SVD_DLL\2009.09.07\PROJECT\DEBUG_BUILD\U_SVD_DLL.OBJ引用的外部'ap::minint(int, int)'尚未解决。
[ILINK32 Error] 错误:从\COMP-BSN/MY DOCUMENTS! ALGORITMS\SVD\SVD_DLL\2009.09.07\PROJECT\DEBUG_BUILD\U_SVD_DLL.OBJ引用的外部'ap::amalloc(unsigned int, unsigned int)'未解决。
[ILINK32 Error] 错误:未解决的外部'rmatrixsvd(ap::template_2d_array<double, 1>, int, int, int, ap::template_1d_array<double, 1>&, ap::template_2d_array<double, 1>&, ap::template_2d_array<double, 1>&)' 引用自\COMP-BSN\ MY DOCUMENTS\!algoritms\svd\svd_dll\2009.09.07\project\debug_build\u_svd_dll.obj

这怎么解释呢?

也许我的代码中存在一些错误?

以下是代码。

//---------------------------------------------------------------------------

#include <windows.h>
//包括 "H_svd_dll.h"
//---------------------------------------------------------------------------

#pragma argsused

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
返回 1;
}

//---------------------------------------------------------------------------
#include "stdafx.h"
#include "svd.h"
//---------------------------------------------------------------------------

int Convert_Double_To_Real_2D_Array(double inArr[], ap::real_2d_array outArr, int iRow, int iCol)
{

for(int line = 0; line < iRow; line++)
for(int column = 0; column < iCol; column++)
outArr(line, column) = inArr[line*iCol + column] 。


返回 1;
}

//---------------------------------------------------------------------------

int Convert_Real_1D_Array_To_Double(ap::real_1D_array inArr, double outArr[], int iRow, int iCol)
{
int minmn = ap::minint(iRow, iCol)。
for(int i = 0; i < minmn; i++)
outArr[i] = inArr(i);

返回 1;
}

//---------------------------------------------------------------------------

int Convert_Real_2D_Array_To_Double(ap::real_2d_array inArr, double outArr[], int iRow, int iCol)
{
for(int line = 0; line < iRow; line++)
for(int column = 0; column < iCol; column++)
outArr[line*iCol + column] = inArr(line, column)。

返回 1;
}

//---------------------------------------------------------------------------

外部 "C" int __declspec(dllexport) __stdcall SVD_DLL(double inA[], double outW[], double outU[], double outVT[], int Row, int Col)
//int SVD_DLL(double inA[], double outW[], double outU[], double outVT[], int Row, int Col)
{
ap::real_2d_array A。
ap::real_1d_array W;
ap::real_2d_array U。
ap::real_2d_array VT;
int Uneeded = 2;
int VTneed = 2;
int AdditionalMemory = 2;
//为数组分配内存
int minmn = ap::minint(Row, Col)。
A.setbounds(0, Row-1, 0, Col-1)。
W.setbounds(0, minmn-1)。
U.setbounds(0, Row-1, 0, Col-1)。
VT.setbounds(0, Row-1, 0, Col-1)。

//将输入参数从双数转换为ap::real_2d_array
Convert_Double_To_Real_2D_Array(inA, A, Row, Col)。

// 矩阵的svd-分解
rmatrixsvd(A, Row, Col, Uneeded, VTneeded, AdditionalMemory, W, U, VT)。

//将W、U、VT的结果转换为out
Convert_Real_1D_Array_To_Double(W, outW, Row, Col)。
Convert_Real_2D_Array_To_Double(U, outU, Row, Col)。
Convert_Real_2D_Array_To_Double(VT, outVT, Row, Col)。

返回 1;
}

 
2) extern "C" int __declspec(dllexport) __stdcall SVD_DLL(double inA[], double outW[], double outU[], double outVT[], int Row, int Col) ,然后发生错误。

[ILINK32 Error] Error: Unresolved external 'ap::afree(void *)' referenced from \\COMP-BSN\МОИ ДОКУМЕНТЫ\!ALGORITMS\SVD\SVD_DLL\2009.09.07\PROJECT\DEBUG_BUILD\U_SVD_DLL.OBJ

亲爱的,如果你上传带有源代码的档案,我将尝试编译和链接它。

还有--答应给我看看mq4指标本身 :-)。