Tag: 函数指针

C将参数作为void-pointer-list传递给LoadLibrary()中的导入函数

我遇到的问题是我想创建一个通用命令行应用程序,可用于加载库DLL,然后调用库DLL中的函数。 函数名称在命令行中指定,参数也在实用程序命令行中提供。 我可以使用LoadLibrary()函数从动态加载的DLL访问外部函数。 加载库后,我可以使用GetProcAddress()获取指向函数的指针。我想用命令行中指定的参数调用函数。 我可以将void-pointer-list传递给我从LoadLibrary()函数返回的函数指针,类似于下面的示例? 为了简化示例代码,我删除了错误检查。 有没有办法让这样的工作: //在另一个dll的某个地方 int DoStuff(int a,int b) { 返回a + b; } int main(int argc,char ** argv) { void * retval; void * list = argv [3]; HMODULE dll; void *(* generic_function)(void *); dll = LoadLibraryA(argv [1]); // argv [2] =“DoStuff” generic_function = GetProcAddress(dll,argv [2]); // argv [3] = 4,argv […]

如何将各种类型的函数指针存储在一起?

可以使用通用void*存储正常指针。 例如 void* arr[10]; arr[0] = pChar; arr[1] = pINt; arr[2] = pA; 不久之后,我遇到了一个讨论, void*可能无法在所有平台(例如64位及更多)中存储没有数据丢失的函数指针。 我不确定这个事实。 如果这是真的,那么存储函数指针集合的最便携方式是什么? [注意: 这个问题没有令人满意地回答这个问题。] 编辑 :我将使用索引存储此函数指针。 每当访问此集合时,都会对每个索引进行类型转换。 截至目前,我只对制作数组或vector感兴趣。]

C中的通用二叉搜索树

我已经实现了二叉搜索树,但我也想让它变得通用。 代码如下: typedef struct treeNode { int data; struct treeNode *left; struct treeNode *right; } treeNode; 和function: treeNode* FindMin(treeNode *node) { if(node==NULL) { /* There is no element in the tree */ return NULL; } if(node->left) /* Go to the left sub tree to find the min element */ return FindMin(node->left); else return node; } […]

指针初始化为什么?

有一件事总让我困惑,角色指针。 经过四年多的努力,我再次陷入困境。 以上面提到的情况为例。为什么char指针以这种方式运行? 当指针指向什么都没有时,我们怎么能直接解决指针的内容呢?或者它就像char指针存储除地址之外的东西! #include #include int main() { char* charPtr=”I cant understand why”; int* intPtr=60; printf(“%d\n”, intPtr); //displays 60 printf(“%p\n”, intPtr); // displays the hex value of 60 printf(“%s\n”, charPtr); // displays the wh0le string printf(“%p\n”, charPtr); // displays the start address of the string return 0; } 接下来是int指针,它如何接受值60以及它存储在何处? 抛开char指针和malloc,我认为指针的基本思想是得到一个指向的地址! 为什么这些案件 *intptr = 60 […]

在C中模拟std :: bind

我正在使用std :: bind来提供回调,同时通过首先绑定一些参数来抽象一些逻辑。 即 void start() { int secret_id = 43534; //Bind the secret_id to the callback function object std::function cb = std::bind(&callback, secret_id, std::placeholders::_1); do_action(cb); } void do_action(std::function cb) { std::string result = “hello world”; //Do some things… //Call the callback cb(result); } void callback(int secret_id, std::string result) { //Callback can now do something […]

函数指针如何工作?

我问了一些具体的问题。 如何在课堂上初始化它们? 如何将函数作为参数传递? 是否需要在类中声明和定义函数指针? 对于问题2,这是我的意思: void s(void) { //… } void f(function) { // what should I put as type to pass a function as an argument //… } f(s);

是否可以交换C函数?

想看看是否有人知道它是否可以交换C函数……? void swap2(int(*a)(int), int(*b)(int)) { int(*temp)(int) = a; *a = *b; *b = temp; // Gives ‘Non-object type ‘int (int)’ is not assignable } swap2(&funcA, &funcB); 编辑 关于意图的更多数据 – 下面提供了一些答案,它们可以使用typedef创建函数ptr,将它们指向函数并切换它们,从而可以成功调用新交换的ptrs。 但是在交换后以原始名称调用函数显示没有变化。 基本上我正在寻找相当于objc“swizzle”的交流。 我开始认为这是不可能的,因为c完全没有reflection,并且需要实际修改二进制本身(显然不可行)。 d: 欢迎评论。

typedef int(* pf)需要解释

通常,我们使用typedef来获取数据类型的备用名称。 例如 – typedef long int li; // li can be used now in place of long int 但是,下面的typedef做了什么? typedef int (*pf) (int, int);

在C / C ++中引用Lua函数

我有一个函数嵌套在一组表中相对较深。 在C / C ++中是否有一种方法可以获得该函数的“引用”,并在需要使用它时将其(和args)推送到堆栈中?

函数指针指向C中具有不同参数的不同函数

我有两个函数,可变数量和参数类型 double my_func_one(double x, double a, double b, double c) { return x + a + b + c } double my_func_two(double x, double p[], double c) { return x + p[0] + p[1] + c } 我希望使用一个指向函数的指针来实现我上面定义的函数,这些函数基于某些条件变为真,例如 if (true == condition_1) pfunc = my_func_one; else if (true == condition_2) pfunc = my_func_two; // The […]