здесь и здесь они говорят о том, что делать, но мне кажется, что я не могу найти свой проект c # в c ++.
Я добавил проект c # в качестве ссылки в проект c ++, но всякий раз, когда я пытаюсь использовать нужный мне метод, он не может найти пространство имен. я добавил его, щелкнув правой кнопкой мыши по проекту c ++ и выбрав ссылку, затем добавил проект c # с добавлением новой ссылки. оба проекта находятся в одном решении.
В приведенных ниже примерах кода я дал полный код c # (кроме случаев использования) и часть кода c ++ (метод, из которого я пытаюсь вызвать метод c #). Я также изменил некоторые пространства имен, чтобы они стали более общими и не содержали конфиденциальной информации.
код c # выглядит следующим образом.
namespace Company.Pins.Bank.Decryption
{
public class Decrypt
{
[DllImport("decryptsn.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr decryptsn(byte[] InpData);
//__declspec(dllimport) char* decryptsn(char* InpData);
public static String Decryption(string param2)
{
byte[] InpData = new byte[255];
InpData = StrToByteArray(param2);
return Marshal.PtrToStringAnsi(decryptsn(InpData));
}
public static byte[] StrToByteArray(string str)
{
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
return encoding.GetBytes(str);
}
}
}
код C ++
CPReSInterfaceApp theApp;
extern "C" DllExport BOOL WINAPI UserInstruction(
HWND hWnd, HINSTANCE hInst, double* lpNumeric,
TCHAR* lpAlpha1, TCHAR* lpAlpha2)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (lpNumeric == NULL || lpAlpha1 == NULL || lpAlpha2 == NULL)
return FALSE;
ReconcileUHParameter(lpNumeric, lpAlpha1, lpAlpha2);
int iCommand = (int)lpNumeric[0];
lpNumeric[0] = 6;
lpAlpha2 = Company.Pins.Bank.Decryption.Decrypt.Decryption("123456");
return TRUE;
}