Найти - Пользователи
Полная версия: Возврат float-значений фукциями C-dll.
Начало » Python для экспертов » Возврат float-значений фукциями C-dll.
1
lnkr-a
Продолжаю мучить 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 то же самое)
doza_and
lnkr-a
Вообщем-то, что происходит с float-значениями?
Прочитайте в документации ctypes как задать сигнатуру вызываемой функции. Откуда питон узнает что возвращает функция? Вот он и не знает.
lnkr-a
Спасибо. Что-то не разглядел, когда пролистывал.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB