C#에서 C++ DLL을 사용하고 싶습니다. C++ DLL은 win32 콘솔 응용 프로그램입니다. 나는 성공적으로 그것을 불렀고 내가 가지고있는 데이터를 C++에서 처리하려고한다. 그러나 DLL을 실행 한 후에 C# 응용 프로그램이 종료됩니다. 즉,이 줄은 다음과 같습니다. GetArrayFromDLL();
C#에서 C++ DLL 호출
C# 및 Visual C++을 처음 사용합니다. 누군가 제안 할 수 있습니까?
감사
namespace ConsoleApplication1
{
class Program
{
[DllImport("Lidar_DataCal_CDLL.dll")]
public static extern void GetArrayFromDLL();
static void Main(string[] args)
{
Console.WriteLine("This is C# program");
GetArrayFromDLL();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
이것은 내가는 Win32 응용 프로그램에서 작성된 DLL입니다.
extern "C"
{
__declspec(dllexport) void GetArrayFromDLL()
{
/// Reading hex from a file
FILE * pFile;
FILE * f;
signed int array_data[81],array_data1[81],i;
double fangle,fsin,fcos,fangle_rad;
double afx[81],afy[81];
int px,py;
char file_read[20] = "scandataset1.txt";
char file_write[20] = "xycordinates1.txt";
pFile = fopen (file_read,"a+");
if (pFile != NULL)
{
for (i=0;i<80;i++)
{
char buffer[3];
fscanf (pFile, "%x",&array_data[i]);
sprintf (buffer ,"%d", array_data[i]);
printf ("I have read: %s \n\n", buffer);
array_data1[i] = atoi(buffer);
// finding angle
fangle = 20 -((i+1-1)*0.5);
fangle_rad = (PI*fangle/180);
fsin = -sin(fangle_rad);
fcos = cos(fangle_rad);
afx[i] = array_data[i] * fsin;
afy[i] = array_data[i] * fcos;
// printf ("X: %lf and Y: %lf \n\n",afx[i],afy[i]);
f = fopen(file_write,"a+");
if(f != NULL);
fprintf(f,"%lf %lf\n",afx[i],afy[i]);
fclose (f);
}
}
else
{
printf("Error opening fail");
}
fclose (pFile);
}
}
문제의 기능에 대한 정확한 C++ 선언을 파악하는 것이 도움이됩니다. –
C# 코드에 대해 * fishy *가 없습니다. 어쩌면 C++ dll은 문제 해결 자다 –
ConsoleApplication 네임 스페이스에 혼란스러워한다. 프로젝트의 출력 유형이 콘솔 응용 프로그램 인 것 같습니다. WinForms를 사용하려면 Windows 응용 프로그램으로 설정하십시오. P/Invoke는 항상 나를 위해 목에 통증이 있지만 이러한 리소스는 나를 조금 도와줍니다. http://www.pinvoke.net/ http://www.swig.org/ –