Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 15, 2014 14:41:03

lnkr-a
Зарегистрирован: 2014-04-14
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Возврат float-значений фукциями C-dll.

Продолжаю мучить C-Python интеграцию. Кстати, если можете подсказать толковую литературу по этому поводу, то буду очень признателен.

Суть вопросов в данный момент.
Имеем скомпилированную в Visuall Studio dll:
test_dll_for_py.h :

//#ifdef TEST_DLL_EXPORTS
//#define TEST_DLL_API __declspec(dllexport) 
//#else
//#define TEST_DLL_API __declspec(dllimport) 
//#endif
#define TEST_DLL_API __declspec(dllexport)
namespace TestDll
{
	extern "C" TEST_DLL_API void Sq(int n);
	extern "C" TEST_DLL_API int MultInt(int a, int b);
	extern "C" TEST_DLL_API float MultFloat(float a, float b);
}

test_dll_for_py.cpp :
// test_dll_for_py.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "test_dll_for_py.h"
#include <iostream>
//#include <stdexcept>
using namespace std;
namespace TestDll
{
	//Тестовые функции
	void Sq(int n)
	{
		for (int i = 1; i <= n; i++)
			std::cout << i*i << std::endl;
	}
	int MultInt(int a, int b)
	{
		return a * b;
	}
	
	float MultFloat(float a, float b)
	{
		return a * b;
	}
}

И код на Python…
pycdll.py:
import ctypes
from ctypes import *
lib = cdll.LoadLibrary('test_dll_for_py.dll')
print 'Library:'
print lib
print '\nSquares:'
lib.Sq(10)
print '\nint 10x100: ' 
print lib.MultInt(10, 100)
print '\nfloat 10x100: ' 
print c_float(lib.MultFloat(c_float(10), c_float(100))).value
print '\nfloat 5.5x100: '
print c_float(lib.MultFloat(c_float(5.5), c_float(100))).value

В выводе получаем:
pydev debugger: starting (pid: 3664)
Library:
<CDLL ‘test_dll_for_py.dll’, handle f90a0000 at 262ed30>

Squares:
1
4
9
16
25
36
49
64
81
100

int 10x100:
1000

float 10x100:
-858993472.0

float 5.5x100:
-858993472.0

Вообщем-то, что происходит с float-значениями? (с double то же самое)

Офлайн

#2 Апрель 15, 2014 20:08:12

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Возврат float-значений фукциями C-dll.

lnkr-a
Вообщем-то, что происходит с float-значениями?
Прочитайте в документации ctypes как задать сигнатуру вызываемой функции. Откуда питон узнает что возвращает функция? Вот он и не знает.



Офлайн

#3 Апрель 15, 2014 22:46:36

lnkr-a
Зарегистрирован: 2014-04-14
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Возврат float-значений фукциями C-dll.

Спасибо. Что-то не разглядел, когда пролистывал.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version