Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 自动化头文件操作C/C++-&燃气轮机;C#_.net_Visual Studio 2010_Matlab_Visual C++_Pinvoke - Fatal编程技术网

.net 自动化头文件操作C/C++-&燃气轮机;C#

.net 自动化头文件操作C/C++-&燃气轮机;C#,.net,visual-studio-2010,matlab,visual-c++,pinvoke,.net,Visual Studio 2010,Matlab,Visual C++,Pinvoke,我正在使用Matlab编码器生成一些C代码,最终被VS2010中的一个C#应用程序使用。要做到这一点,我必须手动更改某些头文件的某些部分(即正在使用的“接口”): 到 如果我必须在重新生成C代码后对几个头文件执行此操作,那么这可能会非常乏味。有没有一种简单的方法来自动化这个过程 请注意,我不是C/C++程序员。由于其他一些要求,C/C++代码只是用作“中间人”。欢迎任何反馈 附言: 请注意,我主要寻找visual studio 2010解决方案(宏?)。我总是可以编写一个小小的C#/Matlab

我正在使用Matlab编码器生成一些C代码,最终被VS2010中的一个C#应用程序使用。要做到这一点,我必须手动更改某些头文件的某些部分(即正在使用的“接口”):

如果我必须在重新生成C代码后对几个头文件执行此操作,那么这可能会非常乏味。有没有一种简单的方法来自动化这个过程

请注意,我不是C/C++程序员。由于其他一些要求,C/C++代码只是用作“中间人”。欢迎任何反馈

附言:


请注意,我主要寻找visual studio 2010解决方案(宏?)。我总是可以编写一个小小的C#/Matlab程序来实现这一切,但我觉得这太过分了。

在Matlab中,可以使用正则表达式替换(
regexprep
):

这个特殊的
指针
还查找在所有语句之间具有任意数量空格的事件。你可以把它改成

needle = '^extern\s*real_T\s*add\(real_T\s*\w*,\s*real_T\s*\w*\).*$'
如果名称
a
b
在每个标题中也可能不同

请注意,这可以在循环内完成,循环覆盖通过
dir('*.h')
或类似方法获得的所有文件,并且每个迭代借助
textscan()
或类似方法加载一个新的
haystack
。大概是这样的:

% all relevant files
files = dir('*.h');

% Loop over all files
for ii = 1:numel(files)

    % Load the file
    fid = fopen(files(ii).name, 'r');
       haystack = textscan(fid, '%s', 'Delimiter', '\n');    
       haystack = haystack{1};
    fclose(fid);

    % do the replacement here
    % ...

end

谢谢你冗长的回答。我更想找一个VisualStudio的“解决方案”(宏?)。对不起,我应该说得更清楚一些……我想你和OP都忘记了函数的返回类型。我对你坚持使用MATLAB的解决方案表示赞赏,但我会在shell中完成它(sed或awk)@Amro:me也是,但由于OP显然了解MATLAB,并将其标记为“Visual Studio 2010”,我假设没有POSIX shell可用:)@csetzkorn:Visual Studio难道没有“替换所有打开文件中的文本”的选项吗?如果是这样,只需在VS2010中打开所有相关的标题,并用替换项替换所有出现的内容……如果不是在VS2010中,我相信记事本++还有其他一些编辑器可以选择。我敢肯定,在VS2010项目中,有可能用它来制作一种单击式解决方案,但由于这感觉像是一种修复/解决方法,我只想简单的脚本和/或“智能”手动替换。谢谢。是的,这是可能的,但你仍然必须打开它们。每天可能要做几次,这可能会很累。刚刚查看了VS宏-似乎是不可能的。毕竟可能不得不使用纸条/程序。。。感谢您的帮助。VS的“查找/替换”对话框支持正则表达式,不是吗?难道没有办法自定义MATLAB编码器(可能使用嵌入式编码器),以便它生成您想要的标题吗?手动修改自动生成的代码不是一个好做法。那太好了-请在明信片上回答。似乎不可能通过宏更改源文件的内容。
% This is obtained by textscan() or load() or similar. 
haystack = {
    '#ifdef __cplusplus'
    'extern "C" {'
    '#endif'
    'extern real_T add(real_T a, real_T b);'
    '#ifdef __cplusplus'
    '}'
    '#endif'
    '#endif'
};

% Search query
needle = '^extern\s*real_T\s*add\(real_T\s*a,\s*real_T\s*b\).*$'

% Replacement 
pin = 'extern __declspec(dllexport) real_T add(real_T a, real_T b);';

% Replace all needles with pins
C = regexprep(haystack, needle, pin);
needle = '^extern\s*real_T\s*add\(real_T\s*\w*,\s*real_T\s*\w*\).*$'
% all relevant files
files = dir('*.h');

% Loop over all files
for ii = 1:numel(files)

    % Load the file
    fid = fopen(files(ii).name, 'r');
       haystack = textscan(fid, '%s', 'Delimiter', '\n');    
       haystack = haystack{1};
    fclose(fid);

    % do the replacement here
    % ...

end