2015-09-16 2 views
2

Так я был после решения размещен в этом вопросене DLL загружается в питона

Calling a C# library from python

C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.InteropServices; 
using System.Text; 
using System.Threading.Tasks; 
using RGiesecke.DllExport; 

class Test 
{ 
    [DllExport("add", CallingConvention = CallingConvention.Cdecl)] 
    public static int TestExport(int left, int right) 
    { 
     return left + right; 
    } 
} 

Python

import ctypes 
a = ctypes.cdll.LoadLibrary('ClassLibrary1.dll') 
a.add(3, 5) 

Ошибка

AttributeError: function 'add' not found 

Что я сделал, чтобы скопировать DLL на рабочий стол и запустить оболочку Python, в рабочем столе и запустить следующие строки в оболочке Python. Я делаю что-то неправильно?

Я использую Python 2.7

ответ

2

При попытке воспроизвести это, получил такое же поведение. Но причина очень проста - скорее всего, ваш проект .NET, как и мой, нацелен на AnyCPU. Поскольку мы пытаемся создать неуправляемый экспорт - нам нужны отдельные версии для x86 и x64. Итак, чтобы решить вашу проблему - просто выберите x86 для вашей сборки .NET, например. Вот как я нашел это (эта информация также может быть полезна): в Visual Studio откройте «Инструменты»> «Параметры»> «Проекты и решения»> «Сборка и запуск». Там вы увидите уровень детализации вывода MSBuild - установите этот параметр в «Диагностики». Затем создайте свой проект и, среди прочего, вы увидите:

Пропущенный метод экспорта, потому что цель платформы не равна x86 или x64. Установите для свойства MsBuild «NoDllExportsForAnyCpu» значение false, если вы хотите создать отдельные версии для x86 и x64. (например, вы можете сделать это в консоли менеджера пакетов: Set-NoDllExportsForAnyCpu -значение $ false) (TaskId: 35)

+0

Это работает! Большое спасибо. – aceminer

+0

Я искал это довольно долго. благодаря – Soheil

Смежные вопросы