所以我正在开发一个Excel项目,它将使用VBA加载C++ dll.我想要做的是能够将没有特定类型的Excel范围(数据可以是数字或分类)传递给C++ dll(我可以描述我的Excel范围的最佳方式是类型variant
).
所以步骤可能涉及:
我正在考虑使用excel变体和C++变体.但是我不清楚如何使用C++变体,因为我找不到任何好的文档.
我收到的另一个建议是使用COM编程.
我的问题:
更新:
我有一大堆用VBA编写的代码(> 50,000行 - 大量模块).有一个我感兴趣的数组,我想找到这个数组的任何元素的值发生变化的所有条件.值可以在任何模块中更改.由于代码的大小,逐行运行脚本不是最有效的选项.
我正在寻找更好的方法来解决这个问题.我想到的两种方法是以编程方式设置断点(我不确定是否可以完成)或以编程方式在每次赋值后插入一个if块,以某种方式提醒我值已更改.(不是优选的).
所以我的问题归结为:
更新: 感谢您的评论/回复.正如我暗示的那样,我感兴趣的是对当前代码的最少量修改(即插入if-blocks等)并且最感兴趣的是断点概念.我想知道它是否可行.
我正在尝试读取同时写入磁盘的文件.我需要阅读特定大小的块.如果读取的大小小于特定大小,我想要读取文件(类似于ungetc所做的,而不是char []),然后再试一次.附加到已读取的字节对我来说不是一个选项.
这怎么可能?
我尝试通过以下方式保存当前位置:
FILE *fd = fopen("test.txt","r+");
fpos_t position;
fgetpos (fd, &position);
Run Code Online (Sandbox Code Playgroud)
然后读取文件并将指针放回其前面的位置.
numberOfBytes = fread(buff, sizeof(unsigned char), desiredSize, fd)
if (numberByBytes < desiredSize) {
fsetpos (fd, &position);
}
Run Code Online (Sandbox Code Playgroud)
但它似乎没有奏效.
我正在使用定义为16位整数的二维数组
int16_t e[MAX_SIZE*MAX_NODE][MAX_SIZE];
int16_t C[MAX_SIZE][MAX_SIZE];
Run Code Online (Sandbox Code Playgroud)
其中Max_SIZE
和MAX_NODE
是恒定值.我不是一个专业的程序员,但是在StackOverflow的人的帮助下,我设法写了一段代码,在我的数据上部署SSE指令并实现了显着的加速.目前,我正在使用不需要数据对齐的内在函数(主要_mm_loadu_si128
和_mm_storeu_si128
).
for (b=0; b<n; b+=8){
v1 = _mm_loadu_si128((__m128i*)&C[level][b]); // level defined elsewhere.
v2 = _mm_loadu_si128((__m128i*)&e1[node][b]); // node defined elsewhere.
v3 = _mm_and_si128(v1,v2);
_mm_storeu_si128((__m128i*)&C[level+1][b],v3);
}
Run Code Online (Sandbox Code Playgroud)
当我将内在函数更改为对齐数据(即_mm_load_si128
和_mm_store_si128
)时,我得到运行时错误,这导致我假设我的数据没有正确对齐.
我现在的问题是,如果我的数据没有正确对齐,我如何调整它以便能够使用相应的内在函数?我想因为整数是16位,它们会自动对齐.但我似乎错了!
任何有关这方面的见解将受到高度赞赏.
谢谢!
我需要一些关于如何在 Visual Studio 上使用 SSE 逻辑指令的帮助。基于MSDN 网站,
__m128 _mm_and_ps(__m128 a , __m128 b );
ANDPS
Run Code Online (Sandbox Code Playgroud)
可用于对操作数a和b执行逻辑与操作。但我无法弄清楚获取结果所需的确切步骤(内存加载和初始化、设置、存储等)。
具体来说,我想知道如何:
有人可以在一个例子中告诉我如何做到这一点吗?
谢谢!