안녕하세요.
첫번쨰:
c#에서 cpp dll 호출해서 사용중입니다.
비주얼 스튜디오 설정을 변경해서 cpp에서 브레이크 포인트는 잡힙니다,
그런데 c#에서 dll 함수 ctrl+F12 하면 구현으로 이동이 안됩니다.
구체적으로 var cppResult = ForTest(100000000);
여기의 ForTest에서 ctrl+F12해서 cpp구현으로 이동하고 싶습니다.
답변감사합니다.
using System.Runtime.InteropServices;
namespace FunctionsDllTest
{
class Program
{
[DllImport("FunctionsDllD.dll")]
public static extern double ForTest(int length);
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
var cppResult = ForTest(100000000);
Console.WriteLine("CPP 결과 : " + cppResult + "ms");
var csResult = CSharpForTest(100000000);
Console.WriteLine("CS 결과 : " + csResult + "ms");
}
public static double CSharpForTest(int length)
{
DateTime startTime = DateTime.Now; // 시작 시간 기록
int j = 0;
for (int i = 0; i < length; i++)
{
j++;
}
DateTime endTime = DateTime.Now; // 종료 시간 기록
TimeSpan elapsedTime = endTime - startTime; // 경과 시간 계산
double elapsedMilliseconds = elapsedTime.TotalMilliseconds; // 경과 시간을 밀리초로 얻음
return elapsedMilliseconds;
}
}
}
#include "pch.h"
#include "Functions.h"
#include <chrono>
#include <ratio>
double ForTest(int length)
{
auto start_time = std::chrono::high_resolution_clock::now();
int j = 0;
for (int i = 0; i < length; i++)
{
j++;
}
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed_time = end_time - start_time;
double elapsed_ms = elapsed_time.count();
return elapsed_ms;
}
두번쪠
외부 dll 을 다시 dll 랩핑하고 c#에서 호출해서 쓰는 경우는 어떻게 다를까요?
브레이크 포인트도 안잡힙니다.
이렇게 된 이유는 외부 dll이 cpp 에서 사용하던 dll입니다.
네임 맹글링이 되어있어서 cpp로 다시 dll 랩핑하고 c#에서 사용합니다.