dll에서 함수를 가져오는 문제를 이해하는 데 도움이 됩니다. - 페이지 4

 
EXE 파일에 대한 좋은 조언. 나는 그것을 사용하려고합니다. 확인에 관해서는 물론 당신이 옳습니다. 확인해야합니다. 나는 단지 그들에게 관심을 기울일 가치가 있는지 여부에 대한 귀하의 의견을 듣고 싶었습니다. 확인하다. 그러나 설명으로 판단하면 내 생각에는 이것이 우리가 이야기 한 것입니다. 어떻게 생각하십니까? 나는 여전히 C ++에 대한 매우 좋은 실용적인 기반이 없습니다. 이러한 변환기를 작성하는 데 전 세계적으로 복잡한 것이 없다는 것을 뇌로 이해하지만 현재로서는 여전히 나에게 약간의 어려움을 제시하므로 해결하고 싶습니다. 가능한 한 간단하게, 그래서 이미 준비된 기능이 있다면 더...
 

신뢰하지만 확인하십시오 :-). 모든 것이 맞습니다.

 

C++ Builder에서 구현하는 방법을 알아내려고 합니다. 내가 아는 한, EXE 파일을 만들려면 WinMain 함수에서 프로젝트의 세 가지 함수를 순차적으로 호출해야 합니다.

변환데이터_1(...);

rmatrixsvd (...);

변환데이터_2(...);

바르게? 그러나 DLL의 형성은 어떻습니까? 또한? 나는 뭔가에 대해 약간의 의심이 있습니다 ... Arkhangelsky의 책 "Programming in C ++ Builder .."에서 이해하려고합니다.

그러나 지금까지 아무 소용이 없었습니다 ...

 

Ex에서 작업하든 Dll에서 작업하든 차이가 없습니다.

.

이 스레드의 2페이지에서 내 게시물을 복사했습니다.

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

다음과 같이 선언해야 합니다.
extern "C" bool __declspec(dllexport) __stdcall RMatrixSVD_DLL_ADAPTER(double * in1, double * in2, double * out)
// 물론 여기에서 행과 열의 수도 전달합니다.
{
// 입력 매개변수를 ap::real_2d_array로 변환
ap::real_2d_array a1 = 변환PDoubleToReal2DArray(in1);
ap::real_2d_array a2 = ...;
.
// 계산하다
ap::real_2d_array a3;
rmatrixsvd(a1, a2, a3);
.
// 3의 결과를 out으로 변환
convertReal2DArrayToPDouble(a3, 출력);
.
반품;
}

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

.

그리고 WinMain 기능은 어떻습니까? 프로그램 진입점인듯...

물론 죄송합니다만, 기능이 무엇인지 이해하십니까?

.

솔직히 말해서, 9월 2일부터 9월 6일까지 이 작업에 이미 얼마나 많은 시간을 보냈습니까?

전문가에게 2시간의 상담(코드 준비 + 설명)을 요청하는 것이 좋지 않을까요?

 

감사합니다. 이제 이해했습니다... 이 모든 기능은 외부 기능으로 구성되어 있으며 내보낼 것입니다. 죄송합니다 제가 좀 망쳤습니다...

전문가에 관해서는 ... 근처에 그런 사람들이 어딘가에 있다면 싶습니다. 그러나 불행히도 아무도 없습니다. 물론 유감입니다 ...

이것은 카자흐스탄입니다 ... 아마도 알마티와 아스타나에 좋은 전문가가 있지만 1000km 이상에 도달 할 수 없습니다 :-).

따라서 모든 것에 스스로 도달해야 합니다. 예, 이미 많은 시간을 보냈습니다 :-). 글쎄, 아무것도... 모스크바도 바로 건설된 것은 아닙니다... :-) 그들이 말했듯이.

 

Visual Studio 2010에 대해 잘 이해가 되지 않습니다... 지금은 베타 버전만 사용 가능한가요? 릴리스, 아직 이해하고 있습니까?

Visual Assist는 별도로 제공됩니까?

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 오류] 오류: \\COMP-BSN\MY DOCUMENTS\!ALGORITMS\SVD\SVD_DLL\2009.09.07\PROJECT\DEBUG_BUILD\U_SVD_DLL.OBJ에서 참조된 외부 'ap::afree(void *)' 해결되지 않은 오류
[ILINK32 오류] 오류: \\COMP-BSN\MY DOCUMENTS\!ALGORITMS\SVD\SVD_DLL\2009.09.07\PROJECT\DEBUG_BUILD\U_SVD_DLL.OBJ에서 참조된 외부 'ap::minint(int, int)' 해결되지 않은 외부
[ILINK32 오류] 오류: \\COMP-BSN\MY DOCUMENTS\!ALGORITMS\SVD\SVD_DLL\2009.09.07\PROJECT\DEBUG_BUILDLL\U_SVD_에서 참조된 외부 'ap::amalloc(unsigned int, unsigned int)' 해결되지 않은 외부
[ILINK32 오류] 오류: 해결되지 않은 외부 'rmatrixsvd(ap::template_2d_array<double, 1>, int, int, 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 이유, void* lpReserved)
{
반환 1;
}

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

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

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


반환 1;
}

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

int Convert_Real_1D_Array_To_Double(ap::real_1d_array inArr, 이중 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, 이중 outArr[], int iRow, int iCol)
{
for(int line = 0; line < iRow; line++)
for(int 열 = 0; 열 < iCol; 열++)
outArr[줄*iCol + 열] = inArr(줄, 열);

반환 1;
}

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

extern "C" int __declspec(dllexport) __stdcall SVD_DLL(double inA[], double outW[], double outU[], double outVT[], int 행, int 열)
//int SVD_DLL(double inA[], double outW[], double outU[], double outVT[], int 행, int 열)
{
ap::real_2d_array A;
ap::real_1d_array W;
ap::real_2d_arrayU;
ap::real_2d_array VT;
정수 불필요 = 2;
정수 VT필요 = 2;
int 추가 메모리 = 2;
// 배열에 메모리 할당
int minmn = ap::minint(행, 열);
A.setbounds(0, 행-1, 0, 열-1);
w.setbounds(0, minmn-1);
U.setbounds(0, 행-1, 0, 열-1);
VT.setbounds(0, 행-1, 0, 열-1);

// 입력 매개변수를 double에서 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, 행, 열);
Convert_Real_2D_Array_To_Double(U, outU, 행, 열);
Convert_Real_2D_Array_To_Double(VT, outVT, 행, 열);

반환 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 표시기 자체를 보여주겠다고 약속합니다 :-).