Tag: 接口

为包含void *参数的函数创建SWIG C#包装器

我正在尝试为包含函数的C .lib创建一个C#包装器,使用SWIG获取一个void指针。 int inputPointExample(void* input); int outputPointerExample(void* output); 默认情况下,SWIG不处理void指针转换,您必须以某种方式使用类型映射。 我找到了这个页面 – > http://www.nickdarnell.com/2011/05/swig-and-a-miss/ Number 9表示使用以下类型映射来处理void指针… %typemap(ctype) void * “void *” %typemap(imtype) void * “IntPtr” %typemap(cstype) void * “IntPtr” %typemap(csin) void * “$csinput” %typemap(in) void * %{ $1 = $input; %} %typemap(out) void * %{ $result = $1; %} %typemap(csout) void * { return $imcall; } […]

如何使用Java / Scala在内存G-wan中保存数据结构

我认为Gwan是运行Scala应用程序的更高性能方式。 我们的用例涉及使用Scala数据结构在内存中保留大量数据。 这比简单的hashmap要复杂一些,所以我想避免尝试将它楔入Gwan附带的K / V商店。 还有许多C-library非常适合与之交互。 很好奇在Gwan上使用带有Scala应用程序的第三方C库的过程。 谢谢!

你如何使用Ruby / DL? 这是正确的吗?

我正在尝试在RSPEC(ruby风味的BDD)和Windows应用程序之间编写一个接口。 应用程序本身是用一种晦涩的语言编写的,但它有一个C API来提供访问。 我已经使用了Ruby / DL,但是即使是最基本的DLL方法调用也很困难。 这是我到目前为止,在一个名为gt4r.rb的文件中: require ‘dl/import’ module Gt4r extend DL::Importable dlload ‘c:\\gtdev\\r321\\bin\\gtvapi’ # GTD initialization/termination functions extern ‘int GTD_init(char *[], char *, char *)’ extern ‘int GTD_initialize(char *, char *, char *)’ extern ‘int GTD_done(void)’ extern ‘int GTD_get_error_message(int, char **)’ end 到目前为止,我的阅读表明这是我需要的所有内容,因此我写了一个RSPEC示例: require ‘gt4r’ @@test_environment = “INCLUDE=C:\\graphtalk\\env\\aiadev\\config\\aiadev.ini” @@normal_user = “BMCHARGUE” describe Gt4r […]

实现不同但相似的结构/function集而无需复制粘贴

我正在为C( 这里 )实现一组常见但又不那么简单(或容易出错)的数据结构,并且只是提出了让我思考的想法。 简而言之,问题是,实现两个使用类似算法但具有不同接口的结构的最佳方法是什么,而无需复制粘贴/重写算法? 最好的,我的意思是大多数可维护和可调试。 我认为很明显为什么你不想要同一算法的两个副本。 动机 假设你有一组结构(称之为map ),带有一组相关的函数( map_*() )。 由于地图需要将任何内容映射到任何东西,我们通常会使用void *key和void *data来实现它。 但是,想一下int到int的映射。 在这种情况下,您需要将所有键和数据存储在另一个数组中,并将其地址提供给map ,这不太方便。 现在假设有一个类似的结构(称之为mapc ,c表示“副本”),在初始化期间需要sizeof(your_key_type)和sizeof(your_data_type)并在insert上给出void *key和void *data ,它将使用memcpy复制地图中的键和数据,而不仅仅是保持指针。 用法示例: int i; mapc m; mapc_init(&m, sizeof(int), sizeof(int)); for (i = 0; i < n; ++i) { int j = rand(); /* whatever */ mapc_insert(&m, &i, &j); } 这是相当不错的,因为我不需要保留另一个i s和j s数组。 我的想法 在上面的示例中, […]

getifaddrs()结果发生变化时是否有通知机制?

在启动时,我的程序调用getifaddrs()来找出可用于链接本地IPv6多播的网络接口。 这样做可行,但它不处理getifaddrs()返回后可用网络接口集发生变化的情况。 当网络接口发生变化时,OS是否有某种方式通知我的程序,所以我可以再次调用getifaddrs()并更新我的列表? 或者我注定每隔几秒钟就会对getifaddrs()进行一次轮询? (注意:在Windows上,我调用GetAdaptersAddresses()而不是getifaddrs(),但是存在相同的问题)

扩展’不完整’类型(SWIG)

我正在寻找一种扩展方法(即使用%extend指令将新成员添加到类型中)一种在库文件本身中定义的类型,而库的头文件仅提供该类型的前向声明。 处理类型,就好像它的定义在编译时已知,会导致以下警告: Warning 303: %extend defined for an undeclared class [name of the type]. 是否有人知道此问题的解决方案或解决方法? 我确信有一个,因为SWIG的文档声明swig假定每次找到未知类型是结构或联合。 提前谢谢了!

与getifaddrs的MAC地址

有没有办法通过getifaddrs()获取接口的MAC地址? 我已经有了这个,获取IP地址,但我有点想念MAC 。 我试图在getifaddrs()查找信息,但没有关于MAC地址的信息 struct ifaddrs *iflist, *iface; if (getifaddrs(&iflist) ifa_next) { int af = iface->ifa_addr->sa_family; const void *addr; const void *mac; switch (af) { case AF_INET: addr = &((struct sockaddr_in *)iface->ifa_addr)->sin_addr; break; //get mac address somehow? default: addr = NULL; } if (addr) { if (inet_ntop(af, addr, addrp, sizeof addrp) == NULL) { perror(“inet_ntop”); […]

如何了解C中接口的IP地址?

假设我正在运行一个名为IpAddresses.c的程序。 我希望该程序根据每个接口获取此设备具有的所有IP地址。 就像ifconfig一样。 我怎样才能做到这一点? 我对ioctl了解不多,但我读到它可能会对我有所帮助。

创建一个返回char *的C函数的FORTRAN接口

现在,我已经对此持续了大约一个星期,并且在论坛之后搜索了论坛,以便清楚地解释如何从C向FORTRAN发送char *。 为了让事情更令人沮丧,从FORTRAN向C发送char *参数是直截了当的…… 从FORTRAN向C发送char *参数(这很好): // The C header declaration (using __cdecl in a def file): extern “C” double GetLoggingValue(char* name); 来自FORTRAN: ! The FORTRAN interface: INTERFACE REAL(8) FUNCTION GetLoggingValue [C, ALIAS: ‘_GetLoggingValue’] (name) USE ISO_C_BINDING CHARACTER(LEN=1, KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name END FUNCTION GetLoggingValue END INTERFACE ! Calling the function: GetLoggingValue(user_name) 当尝试使用类似逻辑从C返回char *时,我遇到问题后出现问题。 […]