用户可以动态的设定矩阵的行数和列数。
int SetMatrixRowAndCol(Martrix *matrix, int row, int col);
用户可以设定矩阵的每个单元(nRow, nCol)的数值。
int SetMatrixValue(Martrix *matrix,int x, int y, float* value);
考虑如何将上述函数编译成一个DLL, DLL中提供回调函数让用户在读文件的时候,有机会把回调函数用于把文件内容显示到窗体上面。
前边做好了,就是下边,怎么写回调函数把文件内容显示到窗体上面呢?求好人解答。
自己写的一部分代码
typedef juzhendll_API struct maxtrix
{
unsigned int row;
unsigned int col;
float **value;
}Martrix;
int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col)
{
int i;
(matrix->value) = (float **)malloc(sizeof(float *) *row);
memset((matrix->value), 0, sizeof(float *) *row);
for(i=0;i<(int)row;i++)
{
*(matrix->value+i) = (float *)malloc(sizeof(float) * col);
memset(*(matrix->value+i), 0, sizeof(float) * col);
}
return 0;
}
int SetMatrixValue(Martrix *matrix,int x, int y, float** value)
{
int i,j;
printf("请按行的顺序依次输入矩阵各项的值(共%d项):\n",x*y);
for(i=0;i<=x-1;i++)
{
printf("\n");
for(j=0;j<=y-1;j++)
{
scanf("%f", &value[i][j]);
}
}
return 0;
}
7 个解决方案
#1
这是我在dll中的代码,
#ifndef JUZHENDLL_H_
#define JUZHENDLL_H_
#ifdef juzhendll_API
#else
#define juzhendll_API extern "C" _declspec(dllimport)
#endif
typedef struct maxtrix
{
unsigned int row;
unsigned int col;
float **value;
}Martrix;
juzhendll_API int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col);
juzhendll_API int SetMatrixValue(Martrix *matrix,int x, int y, float** value);
juzhendll_API int Initialize(Martrix *matrix,int x, int y, float** value);
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include "juzhendll.h"
#define juzhendll_API extern "C" _declspec(dllimport)
int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col)
{
int i;
(matrix->value) = (float **)malloc(sizeof(float *) *row);
memset((matrix->value), 0, sizeof(float *) *row);
for(i=0;i<(int)row;i++)
{
*(matrix->value+i) = (float *)malloc(sizeof(float) * col);
memset(*(matrix->value+i), 0, sizeof(float) * col);
}
return 0;
}
int SetMatrixValue(Martrix *matrix,int x, int y, float** value)
{
int i,j;
printf("请按行的顺序依次输入矩阵各项的值(共%d项):\n",x*y);
for(i=0;i<=x-1;i++)
{
printf("\n");
for(j=0;j<=y-1;j++)
{
scanf("%f", &value[j]);
}
}
return 0;
}
int Initialize(Martrix *matrix,int x, int y, float** value)
{
FILE *fp;
int i,j;
if((fp=fopen("e:\\fr1.txt","r"))==NULL)
{
printf( "can not open file\n ");
return 0;
}
for(i=0;i<=x-1;i++)
{
for(j=0;j<=y-1;j++)
{
fscanf(fp,"%f# ",&value[j]);
printf( "%f",value[j]);
}
printf("\n");
}
fclose(fp);
fp=NULL;
return 0;
}
如果要实现DLL中提供回调函数让用户在读文件的时候,有机会把回调函数用于把文件内容显示到窗体上面。
这个该怎么做呢,谢谢,对回调函数不是太理解
#ifndef JUZHENDLL_H_
#define JUZHENDLL_H_
#ifdef juzhendll_API
#else
#define juzhendll_API extern "C" _declspec(dllimport)
#endif
typedef struct maxtrix
{
unsigned int row;
unsigned int col;
float **value;
}Martrix;
juzhendll_API int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col);
juzhendll_API int SetMatrixValue(Martrix *matrix,int x, int y, float** value);
juzhendll_API int Initialize(Martrix *matrix,int x, int y, float** value);
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include "juzhendll.h"
#define juzhendll_API extern "C" _declspec(dllimport)
int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col)
{
int i;
(matrix->value) = (float **)malloc(sizeof(float *) *row);
memset((matrix->value), 0, sizeof(float *) *row);
for(i=0;i<(int)row;i++)
{
*(matrix->value+i) = (float *)malloc(sizeof(float) * col);
memset(*(matrix->value+i), 0, sizeof(float) * col);
}
return 0;
}
int SetMatrixValue(Martrix *matrix,int x, int y, float** value)
{
int i,j;
printf("请按行的顺序依次输入矩阵各项的值(共%d项):\n",x*y);
for(i=0;i<=x-1;i++)
{
printf("\n");
for(j=0;j<=y-1;j++)
{
scanf("%f", &value[j]);
}
}
return 0;
}
int Initialize(Martrix *matrix,int x, int y, float** value)
{
FILE *fp;
int i,j;
if((fp=fopen("e:\\fr1.txt","r"))==NULL)
{
printf( "can not open file\n ");
return 0;
}
for(i=0;i<=x-1;i++)
{
for(j=0;j<=y-1;j++)
{
fscanf(fp,"%f# ",&value[j]);
printf( "%f",value[j]);
}
printf("\n");
}
fclose(fp);
fp=NULL;
return 0;
}
如果要实现DLL中提供回调函数让用户在读文件的时候,有机会把回调函数用于把文件内容显示到窗体上面。
这个该怎么做呢,谢谢,对回调函数不是太理解
#2
void SetCBFunc(pfCbFunc pfFunc)
void AModuleFunc(const char *pchBuf, unsigned short wBufLen, void *pvContext)
这两个函数是外部调用函数是吗,那在dll里边写一个g_pfCbFunc函数吗?这三个参数都是用来接收什么的呢const char *pchBuf, unsigned short wBufLen, void *pvContext,
void AModuleFunc(const char *pchBuf, unsigned short wBufLen, void *pvContext)
这两个函数是外部调用函数是吗,那在dll里边写一个g_pfCbFunc函数吗?这三个参数都是用来接收什么的呢const char *pchBuf, unsigned short wBufLen, void *pvContext,
#3
DLL修改:
//主程序使用
typedef void (*FILEVALUEPROC) (float value); //回调函数声明
int Initialize(Martrix *matrix,int x, int y, float** value, FILEVALUEPROC lpFileValueProc)
{
FILE *fp;
int i,j;
if((fp=fopen("e:\\fr1.txt","r"))==NULL)
{
printf( "can not open file\n ");
return 0;
}
for(i=0;i<=x-1;i++)
{
for(j=0;j<=y-1;j++)
{
fscanf(fp,"%f# ",&value[j]);
printf("%f",value[j]);
lpFileValueProc(value[j]); }
printf("\n");
}
fclose(fp);
fp=NULL;
return 0;
}
//主程序使用
typedef void (*FILEVALUEPROC) (float value);
//回调函数实体
void MyFileValueProc(float value)
{
//想怎么显示就怎么显示
}
//调用
typedef int(*lpInitialize)(Martrix *matrix,int x, int y, float** value, FILEVALUEPROC lpFileValueProc);
float *value[20];
Initialize(NULL, 1, 2, value, MyFileValueProc);
#4
代码中本来想加红的
看的时候 去掉 和
看的时候 去掉 和
#5
看的时候去掉: [color=#FF0000]
#6
你现在的问题是什么?
void MyFileValueProc(float value)
中的实现不知道怎么写?
void MyFileValueProc(float value)
中的实现不知道怎么写?
#7
不好意思,最近几天外出,刚看到回复,万分感谢。
#1
这是我在dll中的代码,
#ifndef JUZHENDLL_H_
#define JUZHENDLL_H_
#ifdef juzhendll_API
#else
#define juzhendll_API extern "C" _declspec(dllimport)
#endif
typedef struct maxtrix
{
unsigned int row;
unsigned int col;
float **value;
}Martrix;
juzhendll_API int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col);
juzhendll_API int SetMatrixValue(Martrix *matrix,int x, int y, float** value);
juzhendll_API int Initialize(Martrix *matrix,int x, int y, float** value);
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include "juzhendll.h"
#define juzhendll_API extern "C" _declspec(dllimport)
int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col)
{
int i;
(matrix->value) = (float **)malloc(sizeof(float *) *row);
memset((matrix->value), 0, sizeof(float *) *row);
for(i=0;i<(int)row;i++)
{
*(matrix->value+i) = (float *)malloc(sizeof(float) * col);
memset(*(matrix->value+i), 0, sizeof(float) * col);
}
return 0;
}
int SetMatrixValue(Martrix *matrix,int x, int y, float** value)
{
int i,j;
printf("请按行的顺序依次输入矩阵各项的值(共%d项):\n",x*y);
for(i=0;i<=x-1;i++)
{
printf("\n");
for(j=0;j<=y-1;j++)
{
scanf("%f", &value[j]);
}
}
return 0;
}
int Initialize(Martrix *matrix,int x, int y, float** value)
{
FILE *fp;
int i,j;
if((fp=fopen("e:\\fr1.txt","r"))==NULL)
{
printf( "can not open file\n ");
return 0;
}
for(i=0;i<=x-1;i++)
{
for(j=0;j<=y-1;j++)
{
fscanf(fp,"%f# ",&value[j]);
printf( "%f",value[j]);
}
printf("\n");
}
fclose(fp);
fp=NULL;
return 0;
}
如果要实现DLL中提供回调函数让用户在读文件的时候,有机会把回调函数用于把文件内容显示到窗体上面。
这个该怎么做呢,谢谢,对回调函数不是太理解
#ifndef JUZHENDLL_H_
#define JUZHENDLL_H_
#ifdef juzhendll_API
#else
#define juzhendll_API extern "C" _declspec(dllimport)
#endif
typedef struct maxtrix
{
unsigned int row;
unsigned int col;
float **value;
}Martrix;
juzhendll_API int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col);
juzhendll_API int SetMatrixValue(Martrix *matrix,int x, int y, float** value);
juzhendll_API int Initialize(Martrix *matrix,int x, int y, float** value);
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include "juzhendll.h"
#define juzhendll_API extern "C" _declspec(dllimport)
int SetMatrixRowAndCol(Martrix *matrix, unsigned int row, unsigned int col)
{
int i;
(matrix->value) = (float **)malloc(sizeof(float *) *row);
memset((matrix->value), 0, sizeof(float *) *row);
for(i=0;i<(int)row;i++)
{
*(matrix->value+i) = (float *)malloc(sizeof(float) * col);
memset(*(matrix->value+i), 0, sizeof(float) * col);
}
return 0;
}
int SetMatrixValue(Martrix *matrix,int x, int y, float** value)
{
int i,j;
printf("请按行的顺序依次输入矩阵各项的值(共%d项):\n",x*y);
for(i=0;i<=x-1;i++)
{
printf("\n");
for(j=0;j<=y-1;j++)
{
scanf("%f", &value[j]);
}
}
return 0;
}
int Initialize(Martrix *matrix,int x, int y, float** value)
{
FILE *fp;
int i,j;
if((fp=fopen("e:\\fr1.txt","r"))==NULL)
{
printf( "can not open file\n ");
return 0;
}
for(i=0;i<=x-1;i++)
{
for(j=0;j<=y-1;j++)
{
fscanf(fp,"%f# ",&value[j]);
printf( "%f",value[j]);
}
printf("\n");
}
fclose(fp);
fp=NULL;
return 0;
}
如果要实现DLL中提供回调函数让用户在读文件的时候,有机会把回调函数用于把文件内容显示到窗体上面。
这个该怎么做呢,谢谢,对回调函数不是太理解
#2
void SetCBFunc(pfCbFunc pfFunc)
void AModuleFunc(const char *pchBuf, unsigned short wBufLen, void *pvContext)
这两个函数是外部调用函数是吗,那在dll里边写一个g_pfCbFunc函数吗?这三个参数都是用来接收什么的呢const char *pchBuf, unsigned short wBufLen, void *pvContext,
void AModuleFunc(const char *pchBuf, unsigned short wBufLen, void *pvContext)
这两个函数是外部调用函数是吗,那在dll里边写一个g_pfCbFunc函数吗?这三个参数都是用来接收什么的呢const char *pchBuf, unsigned short wBufLen, void *pvContext,
#3
DLL修改:
//主程序使用
typedef void (*FILEVALUEPROC) (float value); //回调函数声明
int Initialize(Martrix *matrix,int x, int y, float** value, FILEVALUEPROC lpFileValueProc)
{
FILE *fp;
int i,j;
if((fp=fopen("e:\\fr1.txt","r"))==NULL)
{
printf( "can not open file\n ");
return 0;
}
for(i=0;i<=x-1;i++)
{
for(j=0;j<=y-1;j++)
{
fscanf(fp,"%f# ",&value[j]);
printf("%f",value[j]);
lpFileValueProc(value[j]); }
printf("\n");
}
fclose(fp);
fp=NULL;
return 0;
}
//主程序使用
typedef void (*FILEVALUEPROC) (float value);
//回调函数实体
void MyFileValueProc(float value)
{
//想怎么显示就怎么显示
}
//调用
typedef int(*lpInitialize)(Martrix *matrix,int x, int y, float** value, FILEVALUEPROC lpFileValueProc);
float *value[20];
Initialize(NULL, 1, 2, value, MyFileValueProc);
#4
代码中本来想加红的
看的时候 去掉 和
看的时候 去掉 和
#5
看的时候去掉: [color=#FF0000]
#6
你现在的问题是什么?
void MyFileValueProc(float value)
中的实现不知道怎么写?
void MyFileValueProc(float value)
中的实现不知道怎么写?
#7
不好意思,最近几天外出,刚看到回复,万分感谢。