Есть dll написанная в MFC, в ней одна функция описана как
extern "C" __declspec(dllexport) const BOOL __cdecl Encrypt(CassetProperty* lpPostData, TCHAR *returnBuffer)
В ней CassetProperty — структура
typedef struct CassetProperty {
int year;
int month;
int day;
int hour;
int minute;
int number;
int type;
int line;
};
В функцию загоняется структура, а возвращается строка. Перекопал много статей, но чего-то не докручиваю все равно, потому как постоянно вылетаю с ошибкой "Была сделана попытка загрузить программу, имеющую неверный формат."
Пытаюсь делать так
public partial class Form1 : Form
{
[DllImport("CassetEncrypter.dll", SetLastError = true)]
private static extern bool Encrypt(CassetProperty postData, ref StringBuilder data);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
CassetProperty test;
test.year = 2010;
test.month = 11;
test.day = 16;
test.hour = 14;
test.minute = 29;
test.number = 5;
test.line = 1;
test.type = 2;
int length = 10;
StringBuilder sb = new StringBuilder(length);
if (Encrypt(test, ref sb))
{
// do something useful
}
}
}
Если ввести те параметры CassetProperty, что в примере, то dll должна вернуть строку "8036392812".
В тестовой проге на MFC все замечательно работает.
Проект тут
http://files.rsdn.ru/43869/mfcdlltest.zip