帮助解决从dll中导入函数的问题 - 页 4 12345678910 新评论 Сергей 2009.09.05 18:21 #31 关于Eche文件的建议不错。当然,你是对的,它们应该被检查。我只是想听听你的意见,是否值得关注它们,即检查它们。 但从描述来看,我认为这就是我们谈论的内容,你怎么看? 我对实用的C++还不是很在行,我用大脑理解,写这些转换器没有什么全球复杂的东西,但目前对我来说还是有点复杂,因此我想尽可能简单地解决它,特别是如果有现成的函数... Андрей 2009.09.05 18:28 #32 相信但要核实 :-)。这就对了。 Сергей 2009.09.05 23:20 #33 我想知道如何在C++ Builder中做一个实现。据我所知,要制作一个EXE文件,你必须连续调用WinMain函数中的三个函数。 ConvertData_1 (...)。 rmatrixsvd(...)。 ConvertData_2(...)。 对吗?在形成DLL时,我们应该做什么?以同样的方式?我有一些疑虑...我试图使用Arkhangelsky的一本书 "Programming in C++ Builder"... 但到目前为止,没有任何效果...... Андрей 2009.09.06 00:05 #34 你在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小时的咨询(代码准备+解释)不是更好吗? Help solve a problem Сергей 2009.09.06 08:10 #35 谢谢,我现在明白了...所有这些功能都是由一个外部的框架,这也是我要导出的东西。对不起,有点糊涂了...... 关于专家,我很想...如果附近有一个。但是,不幸的是,没有,这当然是一种遗憾...... 这里是哈萨克斯坦...虽然在阿拉木图和阿斯塔纳可能有很好的专家,但我不能去找他们:-),超过1000公里远。 这就是为什么我必须自己去想办法。是的,我已经浪费了很多时间:-)。好吧,别介意......。莫斯科也不是在一天之内建成的。:-) 正如他们所说。 Сергей 2009.09.06 08:55 #36 我不太了解Visual Studio 2010...现在只有Beta版吗?据我所知,目前还没有发布? 视觉辅助系统是否单独提供? Visual Studio 2008的倒数第二个版本呢? Андрей 2009.09.06 09:03 #37 严格说来,你从2005年起就够了。或2003年。 Visual Assist是一个第三方工具。 Сергей 2009.09.06 09:12 #38 当然,对于手头的任务,这些已经足够了。但我想保持清醒的头脑。我认为这项任务不会是最后一项... 但是Visual Studio 2009似乎没有出现,所以我问你最新的可用版本... 为了研究......所以要研究到最顶端...:-) Сергей 2009.09.07 20:22 #39 终于有东西诞生了...:-) 但在编译过程中出现了一些问题,如果你指定该函数是可导出的... 如果你指定。 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; } Help solve a problem MetaTrader 5 和 MATLAB Андрей 2009.09.07 21:02 #40 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指标本身 :-)。 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
相信但要核实 :-)。这就对了。
我想知道如何在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;
}
[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指标本身 :-)。