Обмен данными между MFC DLL и C#
От: SetTom Россия  
Дата: 16.11.10 19:27
Оценка:
Есть 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.